From f5bd901e9e07acb9c1359b329170721c7c146806 Mon Sep 17 00:00:00 2001 From: eddyem Date: Wed, 8 Apr 2015 00:57:44 +0300 Subject: [PATCH] fixed some small things in 1-wire --- 1-wire/Makefile | 10 +- 1-wire/interrupts.c | 50 ++++---- 1-wire/main.c | 174 +++++++++++++++++++++++----- 1-wire/onewire.c | 99 +++++++++++++--- 1-wire/onewire.h | 25 +++- 1-wire/testproj.ihx | 270 ++++++++++++++++++++++++-------------------- stm8l.h | 11 ++ 7 files changed, 444 insertions(+), 195 deletions(-) diff --git a/1-wire/Makefile b/1-wire/Makefile index 9c7377d..26348c7 100644 --- a/1-wire/Makefile +++ b/1-wire/Makefile @@ -6,7 +6,7 @@ LDFLAGS= -mstm8 --out-fmt-ihx -lstm8 FLASHFLAGS=-cstlinkv2 -pstm8s105 SRC=$(wildcard *.c) -# ATTENTION: FIRST in list should be file with main() + OBJ=$(SRC:%.c=%.rel) TRASH=$(OBJ) $(SRC:%.c=%.rst) $(SRC:%.c=%.asm) $(SRC:%.c=%.lst) TRASH+=$(SRC:%.c=%.sym) $(NAME).lk $(NAME).map @@ -14,10 +14,10 @@ INDEPENDENT_HEADERS=../stm8l.h ports_definition.h Makefile all: $(NAME).ihx -$(SRC) : %.c : %.h $(INDEPENDENT_HEADERS) - @touch $@ - -%.h: ; +#$(SRC) : %.c : %.h $(INDEPENDENT_HEADERS) +# @touch $@ +# +#%.h: ; clean: rm -f $(TRASH) diff --git a/1-wire/interrupts.c b/1-wire/interrupts.c index 9c195a0..57ef2cf 100644 --- a/1-wire/interrupts.c +++ b/1-wire/interrupts.c @@ -88,36 +88,32 @@ INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13){ // Timer2 Capture/Compare Interrupt // manage with sending/receiving INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14){ - if(TIM2_SR1 & TIM_SR1_CC1IF){ - TIM2_SR1 &= ~TIM_SR1_CC1IF; - onewire_gotlen = TIM2_CCR1H << 8; - onewire_gotlen |= TIM2_CCR1L; - if(onewire_tick_ctr){ // there's some more data to transmit / receive - --onewire_tick_ctr; - if(is_receiver){// receive bits - ow_data >>= 1; - if(onewire_gotlen < ONE_ZERO_BARRIER){ // this is 1 - ow_data |= 0x80; // LSbit first! - } - // in receiver mode we don't need to send byte after ctr is zero! - if(onewire_tick_ctr == 0){ - TIM2_CR1 &= ~TIM_CR1_CEN; - } - }else{// transmit bits - // update CCR2 registers with new values - if(ow_data & 1){ // transmit 1 - TIM2REG(CCR2, BIT_ONE_P); - }else{ // transmit 0 - TIM2REG(CCR2, BIT_ZERO_P); - } - ow_data >>= 1; + TIM2_SR1 &= ~TIM_SR1_CC1IF; + onewire_gotlen = TIM2_CCR1H << 8; + onewire_gotlen |= TIM2_CCR1L; + if(onewire_tick_ctr){ // there's some more data to transmit / receive + --onewire_tick_ctr; + if(is_receiver){// receive bits + ow_data >>= 1; + if(onewire_gotlen < ONE_ZERO_BARRIER){ // this is 1 + ow_data |= 0x80; // LSbit first! } - }else{ // end: turn off timer - TIM2_CR1 &= ~TIM_CR1_CEN; + // in receiver mode we don't need to send byte after ctr is zero! + if(onewire_tick_ctr == 0){ + TIM2_CR1 &= ~TIM_CR1_CEN; + } + }else{// transmit bits + // update CCR2 registers with new values + if(ow_data & 1){ // transmit 1 + TIM2REG(CCR2, BIT_ONE_P); + }else{ // transmit 0 + TIM2REG(CCR2, BIT_ZERO_P); + } + ow_data >>= 1; } + }else{ // end: turn off timer + TIM2_CR1 &= ~TIM_CR1_CEN; } - //if(TIM2_SR1 & TIM_SR1_CC2IF) - // TIM2_SR1 &= ~TIM_SR1_CC2IF; } #endif // STM8S903 diff --git a/1-wire/main.c b/1-wire/main.c index 5517de4..e2d5776 100644 --- a/1-wire/main.c +++ b/1-wire/main.c @@ -26,21 +26,35 @@ volatile unsigned long Global_time = 0L; // global time in ms U16 paused_val = 500; // interval between LED flashing volatile U8 waitforread = 0; +U8 matchROM = 0, // scan all stored ROMs +starting_val = 0, // starting ROM number for next portion of scan +delete_notexistant = 0; // delete all ROMs that not exists -// show received scrtchpad -void show_received_data(){ +void show_ROM(U8 *ptr){ char i; -// uart_write("show_received_data()\n"); - for(i = 8; i > -1; i--){ - if(i < 8) UART_send_byte(','); - printUHEX(ow_data_array[i]); + for(i = 7; i > -1; i--){ + if(i < 7) UART_send_byte(','); + printUHEX(ptr[i]); } + UART_send_byte('\n'); ow_process_resdata = NULL; - uart_write("\nTemp: "); - print_long(gettemp()); - uart_write("dergC\n"); } +void show_last_ROM(){ + char i; + for(i = 7; i > -1; i--) + ROM[i] = ow_data_array[i]; + show_ROM(ROM); +} + +void show_stored_ROMs(){ + U8 i; + for(i = 0; i < MAX_SENSORS; i++) + if((saved_data->ROMs[i]).is_free == 0) + show_ROM((saved_data->ROMs[i]).ROM_bytes); +} + +void show_received_data(); // ask to read N bytes after temper request void send_read_seq(){ // uart_write("send_read_seq()\n"); @@ -48,14 +62,85 @@ void send_read_seq(){ ow_process_resdata = show_received_data; } +void read_next_sensor(){ + U8 i; + U8 *rom = NULL; + if(!onewire_reset()) return; + for(;starting_val < MAX_SENSORS; starting_val++) + if((saved_data->ROMs[starting_val]).is_free == 0){ + rom = (saved_data->ROMs[starting_val]).ROM_bytes; + starting_val++; + break; + } + if(!rom){ + ow_process_resdata = NULL; + delete_notexistant = 0; + return; // all done + } + ow_data_array[0] = OW_READ_SCRATCHPAD; + ow_process_resdata = send_read_seq; + for(i = 0; i < 8; i++){ + ow_data_array[i+1] = rom[i]; + //if(i) UART_send_byte(','); + //printUHEX(rom[i]); + } + ow_data_array[9] = OW_MATCH_ROM; + onewire_send_bytes(10); +} + +// show received scrtchpad +void show_received_data(){ +// char i; + long L; +/* + for(i = 8; i > -1; i--){ + if(i < 8) UART_send_byte(','); + printUHEX(ow_data_array[i]); + } +*/ + print_long((long)starting_val); + uart_write(": "); + ow_process_resdata = NULL; + L = gettemp(); + if(L == ERR_TEMP_VAL){ + uart_write("no such device"); + if(delete_notexistant){ + uart_write(", "); + if(!erase_saved_ROM(starting_val-1)) uart_write("can't "); + uart_write("delete"); + } + }else{ + print_long(gettemp()); + uart_write("/10 degr.C"); + } + UART_send_byte('\n'); + if(matchROM) // read next value if we have several sensors + read_next_sensor(); +} + void wait_reading(){ // uart_write("wait_reading()\n"); - waitforread = 1; - ow_process_resdata = NULL; + if(ow_data_array[0] == 0xff){ // the conversion is done! + waitforread = 1; + ow_process_resdata = NULL; + }else{ + onewire_receive_bytes(1); // send read seq waiting for end of conversion + } +} + +void start_temp_reading(){ + if(!onewire_reset()){ + uart_write("no devices found!"); + return; + } + ow_data_array[0] = OW_CONVERT_T; + ow_data_array[1] = OW_SKIP_ROM; + ow_process_resdata = wait_reading; + onewire_send_bytes(2); } int main() { - unsigned long T = 0L; + unsigned long T = 0L, Tow = 0L; // int Ival; U8 rb; CFG_GCR |= 1; // disable SWIM @@ -80,6 +165,8 @@ int main() { onewire_setup(); + eeprom_default_setup(); + // enable all interrupts enableInterrupts(); @@ -88,16 +175,25 @@ int main() { if((Global_time - T > paused_val) || (T > Global_time)){ T = Global_time; PORT(LED_PORT, ODR) ^= LED_PIN; // blink on-board LED - if(!OW_CONVERSION_DONE) uart_write("conversion in process\n"); } - process_onewire(); + if(Global_time != Tow){ // process every byte not frequently than once per 1ms + Tow = Global_time; + process_onewire(); + } if(UART_read_byte(&rb)){ // buffer isn't empty switch(rb){ case 'h': // help case 'H': uart_write("\nPROTO:\n+/-\tLED period\nS/s\tset/get Mspeed\n" "r: reset 1-wire\n" - "w: read temper\n"); + "w: read temper\n" + "D: delete not existant ROMs (only for next reading cycle)\n" + "R: read ROM\n" + //"M: match ROM / not match ROM\n" + "S: store last readed ROM\n" + "Z: show all stored ROMs\n" + "W: read temperatures for all stored ROMs\n" + ); break; case '+': paused_val += 100; @@ -116,27 +212,49 @@ int main() { uart_write(")\n"); break; case 'w': - if(!onewire_reset()){ - uart_write("no devices found!"); - break; + start_temp_reading(); + break; + case 'D': + delete_notexistant = 1; + break; + case 'R': + if(onewire_reset()){ + onewire_send_byte(OW_READ_ROM); + while(OW_BUSY); + ow_process_resdata = show_last_ROM; + onewire_receive_bytes(8); } - ow_data_array[0] = OW_CONVERT_T; - ow_data_array[1] = OW_SKIP_ROM; - ow_process_resdata = wait_reading; - onewire_send_bytes(2); + break; + // case 'M': + // matchROM = !matchROM; + // break; + case 'S': + uart_write("storing last ROM "); + if(!store_ROM()) uart_write("fails\n"); + else uart_write("done\n"); + break; + case 'Z': + show_stored_ROMs(); + break; + case 'W': + matchROM = 1; + start_temp_reading(); break; } } if(waitforread){ - if(OW_CONVERSION_DONE){ - if(onewire_reset()){ - waitforread = 0; - ow_process_resdata = send_read_seq; + if(onewire_reset()){ + ow_process_resdata = send_read_seq; + waitforread = 0; + if(!matchROM){ ow_data_array[0] = OW_READ_SCRATCHPAD; ow_data_array[1] = OW_SKIP_ROM; onewire_send_bytes(2); - }else uart_write("error reseting!"); - } + }else{ + starting_val = 0; + read_next_sensor(); + } + }else uart_write("error reseting!"); } }while(1); } diff --git a/1-wire/onewire.c b/1-wire/onewire.c index 7355c68..b81a070 100644 --- a/1-wire/onewire.c +++ b/1-wire/onewire.c @@ -22,6 +22,10 @@ #include "ports_definition.h" #include "uart.h" +// last gotten ROM in reverse order +U8 ROM[8]; + +eeprom_data *saved_data = (eeprom_data*)EEPROM_START_ADDR; // mode of 1-wire volatile OW_modes ow_mode = OW_MODE_OFF; // length of zero-pulse (TIM2_CCR1) @@ -176,16 +180,16 @@ void onewire_send_bytes(U8 N){ * process 1-wire events */ void process_onewire(){ - if(OW_BUSY || !OW_CONVERSION_DONE) return; // let data to be processed + if(OW_BUSY) return; // let data to be processed switch(ow_mode){ case OW_MODE_RECEIVE_N: // wait for receiving of N bytes -> send next byte - +/* uart_write("receive "); printUHEX(ow_data); UART_send_byte(' '); printUHEX(onewire_gotlen); UART_send_byte('\n'); - +*/ ow_data_array[--ow_byte_ctr] = ow_data; if(ow_byte_ctr){ // there's some more data to receive onewire_wait_for_receive(); // wait for another byte @@ -198,21 +202,21 @@ UART_send_byte('\n'); } break; case OW_MODE_TRANSMIT_N: -uart_write("transmit "); +//uart_write("transmit "); if(ow_byte_ctr){ // we have some more data to transmit -printUHEX(ow_data_array[ow_byte_ctr-1]); -UART_send_byte('\n'); +//printUHEX(ow_data_array[ow_byte_ctr-1]); +//UART_send_byte('\n'); onewire_send_byte(ow_data_array[--ow_byte_ctr]); return; } ow_mode = OW_MODE_OFF; -uart_write("is over\n"); +//uart_write("is over\n"); if(ow_process_resdata){ ow_process_resdata(); } break; case OW_MODE_RESET: -uart_write("reset done!\n"); +//uart_write("reset done!\n"); ow_mode = OW_MODE_OFF; break; default: // OW_MODE_OFF @@ -222,7 +226,7 @@ uart_write("reset done!\n"); /** * convert temperature from ow_data_array (scratchpad) - * in case of error return 200000 + * in case of error return 200000 (ERR_TEMP_VAL) * return value in 1000th degrees centigrade * don't forget that bytes in ow_data_array have reverce order!!! * so: @@ -238,20 +242,87 @@ uart_write("reset done!\n"); */ long gettemp(){ // detect DS18S20 - long t; + long t = 0L; U8 l,m; char v; + if(ow_data_array[1] == 0xff) // 0xff can be only if there's no such device or some other error + return ERR_TEMP_VAL; + m = ow_data_array[7]; + l = ow_data_array[8]; if(ow_data_array[4] == 0xff){ // DS18S20 - ; + v = l >> 1 | (m & 0x80); // take signum from MSB + t = ((long)v) * 10L; + if(l&1) t += 5L; // decimal 0.5 } else{ - m = ow_data_array[7]; - l = ow_data_array[8]; v = l>>4 | ((m & 7)<<4); if(m&0x80){ // minus v |= 0x80; } - t = ((long)v) * 1000 + ((long)l&0x0f)*125; + t = ((long)v) * 10L; + m = l&0x0f; // add decimal + t += (long)m; // t = v*10 + l*1.25 -> convert + if(m > 1) t++; // 1->1, 2->3, 3->4, 4->5, 4->6 + else if(m > 5) t+=2L; // 6->8, 7->9 } return t; } + +U8 unlock_EEPROM(){ + // unlock memory + FLASH_DUKR = EEPROM_KEY1; + FLASH_DUKR = EEPROM_KEY2; + // check bit DUL=1 in FLASH_IAPSR + if(!(FLASH_IAPSR & 0x08)) + return 0; + return 1; +} + +void lock_EEPROM(){ + while(!(FLASH_IAPSR & 0x04)); // wait till end + // clear DUL to lock write + FLASH_IAPSR &= ~0x08; +} + +/** + * setup EEPROM after first run: mark all cells as free + */ +void eeprom_default_setup(){ + U8 i; + if(saved_data->magick == EEPROM_MAGICK) return; // all OK + if(!unlock_EEPROM()) return; + saved_data->magick = EEPROM_MAGICK; + for(i = 0; i < MAX_SENSORS; i++) + (saved_data->ROMs[i]).is_free = 1; + lock_EEPROM(); +} + +/** + * erase cell with number num + * return 0 if fails + */ +U8 erase_saved_ROM(U8 num){ + if(!unlock_EEPROM()) return 0; + saved_data->ROMs[num].is_free = 1; + lock_EEPROM(); + return 1; +} + +/** + * store last ROM in EEPROM + * return 0 if fails + */ +U8 store_ROM(){ + U8 i; + ow_ROM *cell = NULL; + for(i = 0; i < MAX_SENSORS; i++) + if(saved_data->ROMs[i].is_free) break; + if(i == MAX_SENSORS) return 0; // fail: all cells are busy + cell = &(saved_data->ROMs[i]); + if(!unlock_EEPROM()) return 0; + cell->is_free = 0; + for(i = 0; i < 8; i++) + cell->ROM_bytes[i] = ROM[i]; + lock_EEPROM(); + return 1; +} diff --git a/1-wire/onewire.h b/1-wire/onewire.h index eeb900a..43e5eef 100644 --- a/1-wire/onewire.h +++ b/1-wire/onewire.h @@ -25,6 +25,8 @@ #include "stm8l.h" +#define ERR_TEMP_VAL 200000 + #define TIM2REGH(reg) TIM2_##reg##H #define TIM2REGL(reg) TIM2_##reg##L #define TIM2REG(reg, val) do{TIM2REGH(reg) = val >> 8; TIM2REGL(reg) = val & 0xff;}while(0) @@ -42,7 +44,6 @@ #define RESET_BARRIER ((U16)550) #define ONE_ZERO_BARRIER ((U16)10) -#define OW_CONVERSION_DONE ((PORT(PD,IDR) & GPIO_PIN3)) #define OW_BUSY ((TIM2_CR1 & TIM_CR1_CEN)) @@ -99,6 +100,24 @@ typedef enum{ OW_MODE_RESET // reset bus } OW_modes; +typedef struct{ + U8 is_free; + U8 ROM_bytes[8]; +} ow_ROM; + +#define EEPROM_MAGICK (0x1234) + +// there's only 128 bytes of EEPROM on STM8S003!!! +// so we have not more than 14 sensors! +#define MAX_SENSORS (14) + +typedef struct{ + U16 magick; + ow_ROM ROMs[MAX_SENSORS]; +} eeprom_data; + +extern U8 ROM[]; +extern eeprom_data *saved_data; extern volatile U8 ow_data; // byte to send/receive extern volatile U8 onewire_tick_ctr; // tick counter @@ -120,4 +139,8 @@ void onewire_send_bytes(U8 N); long gettemp(); +void eeprom_default_setup(); +U8 erase_saved_ROM(U8 num); +U8 store_ROM(); + #endif // __ONEWIRE_H__ diff --git a/1-wire/testproj.ihx b/1-wire/testproj.ihx index c4da74e..e54c98c 100644 --- a/1-wire/testproj.ihx +++ b/1-wire/testproj.ihx @@ -1,123 +1,153 @@ -:2080A0008080808080808080808080805202AE5302F66B017B01A5022603CC81527B016B35 -:2080C000027B02A4FDAE5302F7AE530FF65F975858585858585858CF0019AE5310F6974FF5 -:2080E000CA0019959FCA001A97CF0019725D000A2759C6000A4AC7000A725D001B2726C6C5 -:20810000000944C70009CE0019A3000A2408C60009AA80C70009725D000A2636AE5300F68D -:20812000A4FEF7202D7200000902200CAE53117FAE5312A60AF7200AAE53117FAE5312A6F1 -:208140003CF7C6000944C700092007AE5300F6A4FEF75B0280808080805204AE5240F66B7E -:20816000047B04A520274DAE5241F66B017B04A4804D27FDAE52417B01F7AE00011F02C642 -:20818000001797C600174CC700174F9572FB027B01F7C60016C10017260FC600164CC7008C -:2081A00016A1082604725F0016C60017A1082604725F00175B048080AE5342F644241B90AC -:2081C000CE002072A90001C6001FA90097C6001EA9009590CF0020CF001EAE53427F808020 -:2081E000AE5240F64824F9AE52417B03F781160390F64D2718AE5240F64824F9AE5245F6AC -:20820000AA08F790F6905CAE5241F720E3815202C60017C1001626034F20271605AE0001F6 -:208220001F01C6001697C600164CC700164F9572FB01F690F7C60016A1082604725F001641 -:20824000A6015B0281521C5F1F031F017B21A1042303CC831D7B21A1032603CC831D0D21B4 -:208260002603CC831D961C00051F1B4F5F9772FB1B7F4CA10C25F51E1B1C000AA60AF77B98 -:2082800021A101270E7B21A102271C7B21A104272120301E1FF66B1A5F0F171F027B1A6B2D -:2082A000047B176B01201C161F90FE5F17031F0120111E1FE6036B16E602FE6B031F017B5D -:2082C000166B04A6096B114B0A5F894B001E07891E0789CD8B4E5B089F887B126B13840A41 -:2082E000115F417B124172FB1BAB30F74B0A5F894B001E07891E0789CD8C7F5B081F03174D -:20830000011E0326041E0127067B11A1FF2CB87B114C5F9772FB1B89CD81EE5B025B1C8145 -:2083200052110F01965C5C1F101E101C000B7F1E16A300007B15A2007B14A2002E141616D1 -:2083400090504F1215974F12149517161F14A6016B01A60B6B0E4B0A5F894B001E1A891E22 -:208360001A89CD8AA95B089F0A0E5F417B0E4172FB10AB30F74B0A5F894B001E1A891E1A06 -:2083800089CD8BCB5B081F1617147B0EA1002C034F2002A6011E1626041E1427034D26B61A -:2083A000887B0F6B10844D27140D0127100A0E7B0E6B0F5F7B0F9772FB10A62DF75F7B0F14 -:2083C0009772FB1089CD81EE5B025B1181521ACE00201F0DCE001E1F0B5F1F091F070F041E -:2083E0000F020F01961C000389CD820E5B024D2603CC84717B03A12D260E1E09260A1E0731 -:208400002606A6016B0420697B03A1302403CC84937B03A1392303CC8493A6016B021E099C -:20842000891E09894B0A5F894B00CD8D1E5B081F11170F7B030F195F90977B19909572F9FA -:20844000119F1910979E190F9572A200309FA2006B149EA20017096B077B146B08AE7FFF4D -:2084600013094F12084F120724075F1F091F070F0190CE002072F20DC6001F120C95C600DA -:208480001E120B9790A327109EA2009FA2002403CC83E40D0126040D0226034F201A7B0948 -:2084A000887B0B6B07846B050D0427051E05501F051E1D1605FFA6015B1A81AE853889CDC1 -:2084C00081EE5B021E0389CD81EE5B024B0ACD81E084817B03A40F6B037B03887B04A10A36 -:2084E000842406AB306B032004AB576B037B0381AE854189CD81EE5B027B034EA40F88CD88 -:2085000084D35B0188CD81E0847B0388CD84D35B0188CD81E08481AE5011F6AA20F7AE5069 -:2085200012F6AA20F7AE5242A611F7AE5243A606F7AE5245A62CF7810A4552524F523A201F -:04854000003078008F -:028E87000000E9 -:20854400AE530CA604F7AE5011F6AA08F7AE5013F6AA08F7AE5306A668F7AE5305A602F75A -:20856400AE5308A631F7AE5301A602F7AE5300A684F781725F001B3501000AAE530DA603F9 -:20858400F7AE530EA6E8F7AE5311A601F7AE5312A6F4F7AE5304A601F7AE5300F6AA01F7BC -:2085A40035030018AE5300F64425F9CE0019A302262304A60120014F817B03C70009725F7E -:2085C400001B3507000AAE530D7FAE530EA664F77200000902200CAE53117FAE5312A60A9C -:2085E400F7200AAE53117FAE5312A63CF7AE5304A601F7725400097210530081725F000937 -:208604003501001B3508000AAE530D7FAE530EA664F7AE53117FAE5312A605F7AE5304A630 -:2086240001F772105300817B03C7001535020018CC86007B03C7001535010018815202AEC2 -:208644005300F6442403CC872AAE5010F6A5082603CC872AC60018A1012603CC86C7A10229 -:20866400270AA1032603CC871DCC872AAE87B289CD81EE5B023B0009CD84F0844B20CD8140 -:20868400E084C6001A88CD84F0844B0ACD81E084AE000B725A00159FCB0015979EA90095B2 -:2086A400C60009F7725D00152706CD8600CC872A725F0018CE001C2603CC872ACE001CFDAF -:2086C400CC872AAE87BB89CD81EE5B02725D0015272FAE000B1F01C600154A5F9772FB016B -:2086E400F688CD84F0844B0ACD81E084C600154AC70015974F9572FB01F688CD85BD842011 -:2087040025725F0018AE87C589CD81EE5B02CE001C2713CE001CFD200DAE87CE89CD81EE2B -:208724005B02725F00185B02815210AE000B1F0F1E0FE604A1FF2603CC87AE1E0FE6079538 -:20874400160F90E6086B017B014EA40F6B0E9EA407484848481A0E979E4824049FAA80977A -:208764009F494FA20095909790958990894BE84B035F89CD8D1E5B081F0C170A7B016B0919 -:208784000F085F7B09A40F90974F90954F974F959089894B7D5F894B00CD8D1E5B08517288 -:2087A400F90C9F190B979E190A95515B10817265636569766520007472616E736D6974202E -:1787C400006973206F7665720A00726573657420646F6E65210A00C8 -:068E8900000000000000E3 +:2080A000808080808080808080808080AE5302F6A4FDF7AE530FF65F9758585858585858CB +:2080C00058CF0023AE5310F6974FCA0023959FCA002497CF0023725D00122759C600124A4E +:2080E000C70012725D00252726C6001144C70011CE0023A3000A2408C60011AA80C70011D0 +:20810000725D00122636AE5300F6A4FEF7202D7200001102200CAE53117FAE5312A60AF749 +:20812000200AAE53117FAE5312A63CF7C6001144C700112007AE5300F6A4FEF780808080EE +:20814000805204AE5240F66B047B04A520274DAE5241F66B017B04A4804D27FDAE52417B79 +:2081600001F7AE00011F02C6001F97C6001F4CC7001F4F9572FB027B01F7C6001EC1001F1A +:20818000260FC6001E4CC7001EA1082604725F001EC6001FA1082604725F001F5B048080CC +:2081A000AE5342F644241B90CE002A72A90001C60029A90097C60028A9009590CF002ACFAC +:0881C0000028AE53427F8080CD +:2081C800AE5240F64824F9AE52417B03F781160390F64D2718AE5240F64824F9AE5245F6C4 +:2081E800AA08F790F6905CAE5241F720E3815202C6001FC1001E26034F20271605AE0001FF +:208208001F01C6001E97C6001E4CC7001E4F9572FB01F690F7C6001EA1082604725F001E31 +:20822800A6015B0281521C5F1F031F017B21A1042303CC83057B21A1032603CC83050D21FC +:208248002603CC8305961C00051F1B4F5F9772FB1B7F4CA10C25F51E1B1C000AA60AF77BC8 +:2082680021A101270E7B21A102271C7B21A104272120301E1FF66B1A5F0F171F027B1A6B45 +:20828800047B176B01201C161F90FE5F17031F0120111E1FE6036B16E602FE6B031F017B75 +:2082A800166B04A6096B114B0A5F894B001E07891E0789CD8EF65B089F887B126B13840AAE +:2082C800115F417B124172FB1BAB30F74B0A5F894B001E07891E0789CD90275B081F0317B9 +:2082E800011E0326041E0127067B11A1FF2CB87B114C5F9772FB1B89CD81D65B025B1C8176 +:2083080052110F01965C5C1F101E101C000B7F1E16A300007B15A2007B14A2002E141616E9 +:2083280090504F1215974F12149517161F14A6016B01A60B6B0E4B0A5F894B001E1A891E3A +:208348001A89CD8E515B089F0A0E5F417B0E4172FB10AB30F74B0A5F894B001E1A891E1A72 +:2083680089CD8F735B081F1617147B0EA1002C034F2002A6011E1626041E1427034D26B686 +:20838800887B0F6B10844D27140D0127100A0E7B0E6B0F5F7B0F9772FB10A62DF75F7B0F2C +:2083A8009772FB1089CD81D65B025B1181521ACE002A1F0DCE00281F0B5F1F091F070F043A +:2083C8000F020F01961C000389CD81F65B024D2603CC84597B03A12D260E1E09260A1E077A +:2083E8002606A6016B0420697B03A1302403CC847B7B03A1392303CC847BA6016B021E09E5 +:20840800891E09894B0A5F894B00CD90C65B081F11170F7B030F195F90977B19909572F967 +:20842800119F1910979E190F9572A200309FA2006B149EA20017096B077B146B08AE7FFF65 +:2084480013094F12084F120724075F1F091F070F0190CE002A72F20DC60029120C95C600DE +:2084680028120B9790A327109EA2009FA2002403CC83CC0D0126040D0226034F201A7B096E +:20848800887B0B6B07846B050D0427051E05501F051E1D1605FFA6015B1A81AE852089CDF1 +:2084A80081D65B021E0389CD81D65B024B0ACD81C884817B03A40F6B037B03887B04A10A96 +:2084C800842406AB306B032004AB576B037B0381AE852989CD81D65B027B034EA40F88CDD0 +:2084E80084BB5B0188CD81C8847B0388CD84BB5B0188CD81C88481AE5011F6AA20F7AE50E2 +:2085080012F6AA20F7AE5242A611F7AE5243A606F7AE5245A62CF7810A4552524F523A2037 +:0485280000307800A7 +:02922F0000003D +:20852C00AE530CA604F7AE5011F6AA08F7AE5013F6AA08F7AE5306A668F7AE5305A602F772 +:20854C00AE5308A631F7AE5301A602F7AE5300A684F781725F002535010012AE530DA603FF +:20856C00F7AE530EA6E8F7AE5311A601F7AE5312A6F4F7AE5304A601F7AE5300F6AA01F7D4 +:20858C0035030022AE5300F64425F9CE0023A302262304A60120014F817B03C70011725F7A +:2085AC00002535070012AE530D7FAE530EA664F77200001102200CAE53117FAE5312A60A9A +:2085CC00F7200AAE53117FAE5312A63CF7AE5304A601F7725400117210530081725F00113F +:2085EC003501002535080012AE530D7FAE530EA664F7AE53117FAE5312A605F7AE5304A637 +:20860C0001F772105300817B03C7001D35020022CC85E87B03C7001D350100228188AE5348 +:20862C0000F6442403CC86AEC6002288C6001D4A6B0284A1012739A1022706A103275F2023 +:20864C0061AE00137B01C7001D9FCB001D979EA90095C60011F7725D001D2705CD85E82052 +:20866C0041725F0022CE00262738CE0026FD2032725D001D2719AE00137B01C7001D9FCB6D +:20868C00001D979EA90095F688CD85A5842013725F0022CE0026270ACE0026FD2004725F14 +:2086AC0000228481522090AE001393E601A1FF260AAE0D4090AE0003CC87B393E6076B0B42 +:2086CC0093E6086B0190E604957B0BA4806B149EA1FF26477B01441A1497494FA2009590DA +:2086EC009790958990894B0A5F894B00CD90C65B081F1217107B01442503CC87AF1E121C74 +:20870C0000051F0E7B11A9006B0D7B10A9006B10160E17127B0D6B11CC87AF7B014EA40FEF +:20872C006B067B0BA407484848481A060D142702AA8097494FA20095909790958990894B38 +:20874C000A5F894B00CD90C65B08511F027B01A40F6B180F175F72F917171F889F1904970E +:20876C009E190395841F10161F1712A10123191E121C00017B11A9006B1A7B10A9001F1243 +:20878C006B107B1A6B11201BA10523171E121C00027B11A9006B087B10A9001F126B107BD5 +:2087AC00086B111E1216105B2081AE5064A6AEF7AE5064A656F7AE505FF6A50826034F203D +:2087CC0002A60181AE505FF6A50427F8A4F7AE505FF7815203CE0020FEA312342733200034 +:2087EC00CD87B64D272BCE002090AE1234FF0F014FCE00205C5C1F025F9772FB0288A60199 +:20880C00F784AB090C01887B02A10E8425E3CD87D05B03815202CD87B64D26034F201ACEA2 +:20882C0000205C5C1F017B0597A609424F9572FB01A601F7CD87D0A6015B028152070F012A +:20884C004F9095CE00205C5C1F065F41909E4172FB06F64D260C72A909000C017B01A10E7A +:20886C0025E17B01A10E26034F203C7B0197A609424F9572FB0689CD87B6854D26034F208F +:20888C00267F5C1F04AE00091F024F905F909772F9045F9772FB0288F69790F7844CA10882 +:0A88AC0025E9CD87D0A6015B078106 +:089231004000000000000000F5 :208000008200808382000000820080A0820080A1820080A2820080A3820080A4820080A57E :20802000820080A6820080A78200000082000000820080A8820080A9820080AA820080AB3D -:20804000820080AC82008155820081568200000082000000820081578200815882008159AC -:20806000820081B7820081B8820081DF82000000820000008200000082000000820000001F -:1D808300AE00152707724F00005A26F9AE000F2709D68E86D700155A26F7CC8080AF -:03808000CC884960 -:2087DB005202AE000B1F01A608A1082E08884B2CCD81E084845F9772FB0188F69784888981 -:2087FB005B01CD84F084844AA1FF2CDD725F001D725F001CAE89EE89CD81EE5B02CD872D23 -:20881B00899089CD83205B04AE89F689CD81EE5B025B02814B09CD862B84AE87DBCF001C4E -:20883B008135010024725F001D725F001C8152095F1F041F0272107F60AE50C67FAE5345FE -:20885B00A607F7AE5346A67DF7AE5341A601F7AE5340A685F7AE500CF6AA04F7AE500DF60F -:20887B00AA04F7CD8517CD85449ACE002072F0041F08C6001F12036B07C6001E1202CE00F2 -:20889B0022905F881309909F1208909E12015B012511CE00201304C6001F1203C6001E12F7 -:2088BB00022422CE00201F04CE001E1F02AE500AF6A804F7AE5010F6A5082609AE89FD89F9 -:2088DB00CD81EE5B02CD8641965C89CD820E5B024D2603CC89A87B01A12B2726A12D273EE0 -:2088FB00A1482712A168270EA172274AA1772603CC8981CC89A8AE8A1489CD81EE5B02CC2B -:20891B0089A8CE00221C0064CF0022A327102203CC89A835F4002335010022CC89A8CE003F -:20893B00221D0064CF0022A301F4246135F40023350100222057CD85774D2609AE8A5E89EC -:20895B00CD81EE5B02AE8A6389CD81EE5B0290CE00195F908989CD83205B04AE8A8489CD4D -:20897B0081EE5B022027CD85774D260BAE8A8789CD81EE5B022016AE000BA644F75CA6CC03 -:20899B00F7AE883CCF001C4B02CD863784725D00242603CC8885AE5010F6A5082603CC88EA -:2089BB0085CD85774D271D725F0024AE882FCF001CAE000BA6BEF75CA6CCF74B02CD8637C8 -:2089DB0084CC8885AE8A9989CD81EE5B02CC88855B09810A54656D703A200064657267438F -:2089FB000A00636F6E76657273696F6E20696E2070726F636573730A000A50524F544F3A14 -:208A1B000A2B2F2D094C454420706572696F640A532F73097365742F676574204D737065B1 -:208A3B0065640A723A20726573657420312D776972650A773A20726561642074656D706572 -:208A5B00720A006E6F742000666F756E6420312D77697265206465766963657320286563AA -:208A7B00686F206C656E3A2000290A006E6F206465766963657320666F756E642100657204 -:0E8A9B00726F72207265736574696E672100D8 -:078E8F000000000001F400E7 -:208AA900521D1E22A300007B21A2007B20A2002F040F0D2004A6016B0D0D0D27151E225068 -:208AC9004F12216B1B4F12201F186B167B1B6B1720081622171816201716161817141616BD -:208AE90017121E26A300007B25A2007B24A2002E1E7B27406B114F12266B104F12256B0F2E -:208B09004F12246B0E1610170B160E170920081626170B16241709160B170716091E0789D6 -:208B290090891E18891E1889CD8B4E5B0817010D0D270D504F120290974F120190952002A3 -:208B490016015B1D8152040F020F017B0B484F494D262E160D1E0B905859170D1F0B1E097C -:208B6900130D7B08120C7B07120B240D160D1E0B549056170D1F0B20080C017B016B022049 -:208B8900CA7B026B041E09130D7B08120C7B07120B2513160972F20D7B08120C977B0712FB -:208BA9000B9517091F07160D1E0B549056170D1F0B7B046B030A040D0326CA1E0916075B58 -:208BC9000481521E1E23A300007B22A2007B21A2002F040F112004A6016B110D1127151E24 -:208BE90023504F12226B1C4F12211F146B127B1C6B13200816231714162117121614171962 -:208C0900161217171E27A300007B26A2007B25A2002F040F162004A6016B160D16271E7B01 -:208C290028406B104F12276B0F4F12266B0E4F12256B0D160F170B160D1709200816271742 -:208C49000B16251709160B170716091E078990891E1D891E1D89CD8C7F5B0817017B111801 -:208C6900164D270D504F120290974F12019095200216015B1E8152125F1F051F03A6206B86 -:208C8900027B15484F496B0116171E1590585917171F157B036B0F1E04887B076B138408BC -:208CA9001259090F1F047B126B067B0F6B030D01271A7B06AA016B0A7B056B097B046B0839 -:208CC9007B036B0716091705160717031E05131B7B04121A7B031219252B160572F21B7B1F -:208CE90004121A6B0C7B03121917056B037B0C6B047B18AA0190977B1790957B16977B15C7 -:208D09009517171F150A020D022703CC8C8A1E1716155B128152409096905C961C00431F26 -:208D2900051E05E603961C00471F0B1E0B1F0D1E0D1F3F1E3F88E60197844290FF72A90045 -:208D4900021E05E6031E0B1F071E071F091E091F0F1E0F88E60397844290FF965C1F151E3D -:208D690015F66B171E05F697160B90E603429F1B171E15F71E15F66B1C1E05E60197160B64 -:208D890090E602429F1B1C1E15F79096905C93FE1F1D1E05E6011E0B1F231E231F251E25F4 -:208DA9001F271E2788E60397844272FB1D90FF93FE1F291E05E6021E0B1F2B1E2B1F2D1E2E -:208DC9002D1F311E3188E60297844272FB2990FF16051E05E6021E0B1F331E331F351E3533 -:208DE9001F371E3788E6019784429F90F71E055C1F391E05E60290971E0BE60390421E3989 -:208E0900FF160B1E05E6031E0B1F3D1E3D1F2F1E2F88F69784429F90F71E0B5C1F3B1E059F -:208E2900E60390971E0BE60290421E3BFF1E0B1C00037F1E051C00037F965CE6036B14E616 -:208E4900026B13E6016B12F616431718164572F9131721887B13191A6B218419186B1F166C -:1E8E690021EF02161FFFE603E602FE16491E4772F9219F1920979E191F95515B40813F +:20804000820080AC8200813D8200813E82000000820000008200813F820081408200814124 +:208060008200819F820081A0820081C7820000008200000082000000820000008200000067 +:1D808300AE001D2707724F00005A26F9AE00142709D6922ED7001D5A26F7CC8080EE +:03808000CC8AB7F0 +:2088B600A607A1072E08884B2CCD81C884845F9772FB0388F6978488895B01CD84D884845D +:2088D6004AA1FF2CDD4B0ACD81C884725F0027725F0026815204AE00091F03AE00131F0120 +:2088F600A607905F909772F9035F9772FB0188F69790F7844AA1FF2CE91E0389CD88B65B9E +:20891600025B048152020F010F02CE00205C5C9F1B02979EA90095F64D26075C89CD88B6B5 +:208936005B027B02AB096B020C017B01A10E25DA5B02814B09CD861384AE89E6CF00268140 +:2089560052095F1F01CD855F4D2603CC89E3C60030A10E242FCE00205C5C1F04C60030977A +:20897600A609424F9572FB04F66B03C600304C0D03260C5C1F0816081701C700302005C717 +:20899600003020CA1E01260E725F0027725F0026725F00312037AE00131F061E06A6BEF7A7 +:2089B600AE8949CF00264F5F975C72FB0690935F9772FB0188F69790F7844CA10825E81E51 +:2089D600061C0009A655F74B0ACD861F845B0981C60030974F95905F899089CD83085B047B +:2089F600AE8CCF89CD81D65B02725F0027725F0026CD86B0A30D40263F90A300032639AEC4 +:208A16008CD289CD81D65B02725D0031273EAE8CE189CD81D65B02C600304A88CD88205BB6 +:208A3600014D2609AE8CE489CD81D65B02AE8CEB89CD81D65B022014CD86B0899089CD8323 +:208A5600085B04AE8CF289CD81D65B024B0ACD81C884725D002F2703CD895681AE0013F668 +:208A7600A1FF260E3501002E725F0027725F002620064B01CD86138481CD855F4D260BAEFF +:208A96008CFD89CD81D65B022016AE0013A644F75CA6CCF7AE8A72CF00264B02CD861F84AE +:208AB6008152115F1F041F025F1F081F0672107F60AE50C67FAE5345A607F7AE5346A67D76 +:208AD600F7AE5341A601F7AE5340A685F7AE500CF6AA04F7AE500DF6AA04F7CD84FFCD8559 +:208AF6002CCD87DF9ACE002A72F0041F0CC6002912036B0BC6002812026B0ACE002C4F0F95 +:208B16000E88130D84120B7B0E120A2511CE002A1304C600291203C6002812022411CE00F5 +:208B36002A1F04CE00281F02AE500AF6A804F71E08C3002A26071E06C30028270DCE002A9F +:208B56001F08CE00281F06CD8629965C89CD81F65B024D2603CC8C847B01A12B2749A12D4D +:208B76002761A1442603CC8C2CA148272EA1522603CC8C32A1532603CC8C53A1572603CC2C +:208B96008C7DA15A2603CC8C78A168270EA172274EA1772603CC8C26CC8C84AE8D0F89CDC1 +:208BB60081D65B02CC8C84CE002C1C0064CF002CA327102203CC8C8435F4002D3501002C07 +:208BD600CC8C84CE002C1D0064CF002CA301F42503CC8C8435F4002D3501002CCC8C84CD30 +:208BF600855F4D2609AE8DF989CD81D65B02AE8DFE89CD81D65B0290CE00235F908989CD2F +:208C160083085B04AE8E1F89CD81D65B02CC8C84CD8A8FCC8C84350100312052CD855F4D7A +:208C3600274C4B33CD85A584AE5300F64425F9AE88EACF00264B08CD8613842031AE8E2258 +:208C560089CD81D65B02CD88484D260BAE8E3489CD81D65B022017AE8E3B89CD81D65B02A7 +:208C7600200CCD891A20073501002FCD8A8F725D002E2603CC8AFBCD855F4D272DAE894987 +:208C9600CF0026725F002E725D002F2613AE0013A6BEF75CA6CCF74B02CD861F84CC8AFB1E +:208CB600725F0030CD8956CC8AFBAE8E4189CD81D65B02CC8AFB5B11813A20006E6F207311 +:208CD60075636820646576696365002C200063616E2774200064656C657465002F31302052 +:208CF600646567722E43006E6F206465766963657320666F756E6421000A50524F544F3A36 +:208D16000A2B2F2D094C454420706572696F640A532F73097365742F676574204D737065B3 +:208D360065640A723A20726573657420312D776972650A773A20726561642074656D706574 +:208D5600720A443A2064656C657465206E6F74206578697374616E7420524F4D7320286F37 +:208D76006E6C7920666F72206E6578742072656164696E67206379636C65290A523A2072C9 +:208D960065616420524F4D0A533A2073746F7265206C6173742072656164656420524F4D3A +:208DB6000A5A3A2073686F7720616C6C2073746F72656420524F4D730A573A20726561643C +:208DD6002074656D70657261747572657320666F7220616C6C2073746F72656420524F4DBD +:208DF600730A006E6F742000666F756E6420312D776972652064657669636573202865630B +:208E1600686F206C656E3A2000290A0073746F72696E67206C61737420524F4D20006661AA +:1B8E3600696C730A00646F6E650A006572726F72207265736574696E67210053 +:0A9239000000000001F40000000036 +:208E5100521D1E22A300007B21A2007B20A2002F040F0D2004A6016B0D0D0D27151E2250BC +:208E71004F12216B1B4F12201F186B167B1B6B172008162217181620171616181714161611 +:208E910017121E26A300007B25A2007B24A2002E1E7B27406B114F12266B104F12256B0F82 +:208EB1004F12246B0E1610170B160E170920081626170B16241709160B170716091E07892B +:208ED10090891E18891E1889CD8EF65B0817010D0D270D504F120290974F1201909520024D +:208EF10016015B1D8152040F020F017B0B484F494D262E160D1E0B905859170D1F0B1E09D1 +:208F1100130D7B08120C7B07120B240D160D1E0B549056170D1F0B20080C017B016B02209D +:208F3100CA7B026B041E09130D7B08120C7B07120B2513160972F20D7B08120C977B07124F +:208F51000B9517091F07160D1E0B549056170D1F0B7B046B030A040D0326CA1E0916075BAC +:208F71000481521E1E23A300007B22A2007B21A2002F040F112004A6016B110D1127151E78 +:208F910023504F12226B1C4F12211F146B127B1C6B132008162317141621171216141719B6 +:208FB100161217171E27A300007B26A2007B25A2002F040F162004A6016B160D16271E7B56 +:208FD10028406B104F12276B0F4F12266B0E4F12256B0D160F170B160D1709200816271797 +:208FF1000B16251709160B170716091E078990891E1D891E1D89CD90275B0817017B1118AA +:20901100164D270D504F120290974F12019095200216015B1E8152125F1F051F03A6206BDA +:20903100027B15484F496B0116171E1590585917171F157B036B0F1E04887B076B13840810 +:209051001259090F1F047B126B067B0F6B030D01271A7B06AA016B0A7B056B097B046B088D +:209071007B036B0716091705160717031E05131B7B04121A7B031219252B160572F21B7B73 +:2090910004121A6B0C7B03121917056B037B0C6B047B18AA0190977B1790957B16977B151B +:2090B1009517171F150A020D022703CC90321E1716155B128152409096905C961C00431FCF +:2090D100051E05E603961C00471F0B1E0B1F0D1E0D1F3F1E3F88E60197844290FF72A9009A +:2090F100021E05E6031E0B1F071E071F091E091F0F1E0F88E60397844290FF965C1F151E92 +:2091110015F66B171E05F697160B90E603429F1B171E15F71E15F66B1C1E05E60197160BB8 +:2091310090E602429F1B1C1E15F79096905C93FE1F1D1E05E6011E0B1F231E231F251E2548 +:209151001F271E2788E60397844272FB1D90FF93FE1F291E05E6021E0B1F2B1E2B1F2D1E82 +:209171002D1F311E3188E60297844272FB2990FF16051E05E6021E0B1F331E331F351E3587 +:209191001F371E3788E6019784429F90F71E055C1F391E05E60290971E0BE60390421E39DD +:2091B100FF160B1E05E6031E0B1F3D1E3D1F2F1E2F88F69784429F90F71E0B5C1F3B1E05F4 +:2091D100E60390971E0BE60290421E3BFF1E0B1C00037F1E051C00037F965CE6036B14E66B +:2091F100026B13E6016B12F616431718164572F9131721887B13191A6B218419186B1F16C1 +:1E92110021EF02161FFFE603E602FE16491E4772F9219F1920979E191F95515B408193 :00000001FF diff --git a/stm8l.h b/stm8l.h index f2483e9..103de46 100644 --- a/stm8l.h +++ b/stm8l.h @@ -323,6 +323,17 @@ typedef unsigned long U32; #define TIM_SR1_CC1IF (1 << 1) #define TIM_SR1_UIF (1 << 0) +/* TIM_EGR bits */ +#define TIM_EGR_BG (1 << 7) +#define TIM_EGR_TG (1 << 6) +#define TIM_EGR_COMG (1 << 5) +#define TIM_EGR_CC4G (1 << 4) +#define TIM_EGR_CC3G (1 << 3) +#define TIM_EGR_CC2G (1 << 2) +#define TIM_EGR_CC1G (1 << 1) +#define TIM_EGR_UG (1 << 0) + + /* TIM2 */ #define TIM2_CR1 *(unsigned char*)0x5300 #if defined STM8S105 || defined STM8S103