Mercurial > public > hwos_code
comparison src/eeprom_rs232.asm @ 0:11d4fc797f74
init
| author | heinrichsweikamp |
|---|---|
| date | Wed, 24 Apr 2013 19:22:45 +0200 |
| parents | |
| children | f3062a611eef |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:11d4fc797f74 |
|---|---|
| 1 ;============================================================================= | |
| 2 ; | |
| 3 ; File eeprom_rs232.asm | |
| 4 ; | |
| 5 ; Internal EEPROM, RS232 | |
| 6 ; | |
| 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
| 8 ;============================================================================= | |
| 9 ; HISTORY | |
| 10 ; 2011-08-06 : [mH] moving from OSTC code | |
| 11 | |
| 12 #include "ostc3.inc" | |
| 13 #include "start.inc" | |
| 14 #include "tft.inc" | |
| 15 #include "wait.inc" | |
| 16 #include "strings.inc" | |
| 17 #include "convert.inc" | |
| 18 | |
| 19 ;============================================================================= | |
| 20 eeprom code 0xF00000+0x10 | |
| 21 ; Skip SERIAL number. Should not be overwritten. | |
| 22 global eeprom_serial_save, eeprom_opt_backup | |
| 23 eeprom_serial_save res 2 | |
| 24 eeprom_opt_backup res 0x3E | |
| 25 | |
| 26 ;============================================================================= | |
| 27 basic CODE | |
| 28 | |
| 29 global write_int_eeprom_1 | |
| 30 write_int_eeprom_1: | |
| 31 movwf EEADR | |
| 32 bra write_eeprom ; writes and "returns" after write | |
| 33 | |
| 34 global read_int_eeprom_1 | |
| 35 read_int_eeprom_1: | |
| 36 movwf EEADR | |
| 37 bra read_eeprom ; reads and "returns" after write | |
| 38 | |
| 39 ;============================================================================= | |
| 40 ; reads from internal eeprom | |
| 41 ; Input: EEADRH:EEADR = EEPROM address. | |
| 42 ; Output: EEDATA. | |
| 43 ; Trashed: NONE. | |
| 44 global read_eeprom | |
| 45 read_eeprom: | |
| 46 bcf EECON1,EEPGD | |
| 47 bcf EECON1,CFGS | |
| 48 bsf EECON1,RD | |
| 49 return | |
| 50 | |
| 51 ;============================================================================= | |
| 52 ; writes into internal eeprom | |
| 53 ; Input: EEADRH:EEADR = EEPROM address. | |
| 54 ; EEDATA = byte to write. | |
| 55 ; Trashed: WREG. | |
| 56 global write_eeprom | |
| 57 write_eeprom: | |
| 58 bcf EECON1,EEPGD | |
| 59 bcf EECON1,CFGS | |
| 60 bsf EECON1,WREN | |
| 61 | |
| 62 bcf INTCON,GIE ; even the RTC will be delayed for the next 5 instructions... | |
| 63 movlw 0x55 | |
| 64 movwf EECON2 | |
| 65 movlw 0xAA | |
| 66 movwf EECON2 | |
| 67 bsf EECON1,WR | |
| 68 bsf INTCON,GIE ; ...but the flag for the ISR routines were still set, so they will interrupt now! | |
| 69 | |
| 70 write_eep2: | |
| 71 btfsc EECON1,WR | |
| 72 bra write_eep2 ; wait about 4ms... | |
| 73 bcf EECON1,WREN | |
| 74 return | |
| 75 | |
| 76 global disable_ir | |
| 77 disable_ir: | |
| 78 banksel TXSTA2 | |
| 79 clrf TXSTA2 | |
| 80 clrf RCSTA2 | |
| 81 banksel common | |
| 82 bcf ir_power ; IR off | |
| 83 return | |
| 84 | |
| 85 global enable_ir | |
| 86 enable_ir: | |
| 87 ;init serial port2 (TRISG2) | |
| 88 banksel TXSTA2 | |
| 89 movlw b'00100000' ; BRGH=0, SYNC=0 | |
| 90 movwf TXSTA2 | |
| 91 movlw .102 ; SPBRGH:SPBRG = .102 : 2403 BAUD @ 16MHz | |
| 92 movwf SPBRG2 | |
| 93 clrf SPBRGH2 | |
| 94 movlw b'10010000' | |
| 95 movwf RCSTA2 | |
| 96 banksel common | |
| 97 bsf ir_power ; Power-up IR | |
| 98 btfss ir_power | |
| 99 bra $-6 | |
| 100 return | |
| 101 | |
| 102 ;============================================================================= | |
| 103 global enable_rs232 | |
| 104 enable_rs232: | |
| 105 bcf TRISC,6 ; Output | |
| 106 bsf TRISC,7 ; Input | |
| 107 call speed_normal ; 16MHz | |
| 108 enable_rs232_2: | |
| 109 movlw T2CON_NORMAL | |
| 110 cpfseq T2CON | |
| 111 bra enable_rs232_2 ; Wait until speed is normal | |
| 112 ;init serial port1 (TRISC6/7) | |
| 113 clrf RCSTA1 | |
| 114 clrf TXSTA1 | |
| 115 movlw b'00001000' ; BRG16=1 | |
| 116 movwf BAUDCON1 | |
| 117 movlw b'00100100' ; BRGH=1, SYNC=0 | |
| 118 movwf TXSTA1 | |
| 119 movlw .34 ; SPBRGH:SPBRG = .34 : 114285 BAUD @ 16MHz (+0,79% Error to 115200 BAUD) | |
| 120 movwf SPBRG1 | |
| 121 clrf SPBRGH1 | |
| 122 movlw b'10010000' | |
| 123 movwf RCSTA1 | |
| 124 return | |
| 125 | |
| 126 global disable_rs232 | |
| 127 disable_rs232: | |
| 128 clrf RCSTA1 | |
| 129 clrf TXSTA1 ; UART disable | |
| 130 bsf TRISC,6 ; Input | |
| 131 bsf TRISC,7 ; Input | |
| 132 return | |
| 133 | |
| 134 global rs232_wait_tx | |
| 135 rs232_wait_tx: | |
| 136 ; btfss RCSTA1,SPEN ; Transmitter active? | |
| 137 ; return ; No, return! | |
| 138 | |
| 139 btfsc TXSTA1,TRMT ; Transmit Shift Register empty? | |
| 140 return ; Yes, return! | |
| 141 | |
| 142 btfss TXSTA,TRMT ; RS232 Busy? | |
| 143 bra rs232_wait_tx ; yes, wait... | |
| 144 return ; Done. | |
| 145 | |
| 146 global rs232_get_byte | |
| 147 rs232_get_byte: | |
| 148 bcf PIR1,RCIF ; clear flag | |
| 149 bcf rs232_recieve_overflow ; clear flag | |
| 150 clrf uart1_temp | |
| 151 clrf uart2_temp | |
| 152 rs232_get_byte2: | |
| 153 btfsc PIR1,RCIF ; data arrived? | |
| 154 return | |
| 155 ; bra rs232_get_byte3 | |
| 156 | |
| 157 decfsz uart2_temp,F | |
| 158 bra rs232_get_byte2 | |
| 159 decfsz uart1_temp,F | |
| 160 bra rs232_get_byte2 | |
| 161 ; timeout occoured (about 20ms) | |
| 162 bsf rs232_recieve_overflow ; set flag | |
| 163 ;rs232_get_byte3: | |
| 164 bcf RCSTA1,CREN ; Clear receiver status | |
| 165 bsf RCSTA1,CREN | |
| 166 return ; and return anyway | |
| 167 | |
| 168 END |
