78K0R Assembler W1.31 Date:13 Jun 2010 Page: 1 Command: -c9F0104 -yC:\Program Files\NEC Electronics Tools\DEV -_msgoff inter_asm\i2c_mcu.asm Para-file: In-file: inter_asm\i2c_mcu.asm Obj-file: i2c_mcu.rel Prn-file: i2c_mcu.prn Assemble list ALNO STNO ADRS OBJECT M I SOURCE STATEMENT 1 1 ; 78K0R C Compiler V2.10 Assembler Source Date:13 Jun 2010 Time:19:31:23 2 2 3 3 ; Command : -c9F0104 -yC:\Program Files\NEC Electronics Tools\DEV -_msgoff -i 4 4 ; renge -iC:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\ 5 5 ; V1.20\inc78k0r -ms -qvjl3wt -sainter_asm -zp -no i2c_mcu.c 6 6 ; In-file : i2c_mcu.c 7 7 ; Asm-file : inter_asm\i2c_mcu.asm 8 8 ; Para-file : 9 9 10 10 $PROCESSOR(9F0104) 11 11 $DEBUG 12 12 $NODEBUGA 13 13 $KANJICODE SJIS 14 14 $TOL_INF 03FH, 0210H, 02H, 00H, 00H, 00H, 00H 15 15 16 16 $DGS FIL_NAM, .file, 0100H, 0FFFEH, 03FH, 067H, 01H, 00H 17 17 $DGS AUX_FIL, i2c_mcu.c 18 18 $DGS MOD_NAM, i2c_mcu, 00H, 0FFFEH, 00H, 077H, 00H, 00H 19 19 $DGS SEC_NAM, @@BITS, U, U, 00H, 078H, 00H, 00H 20 20 $DGS SEC_NAM, @@CNST, U, U, 00H, 078H, 00H, 00H 21 21 $DGS SEC_NAM, @@R_INIT, U, U, 00H, 078H, 00H, 00H 22 22 $DGS SEC_NAM, @@INIT, U, U, 00H, 078H, 00H, 00H 23 23 $DGS SEC_NAM, @@DATA, U, U, 00H, 078H, 00H, 00H 24 24 $DGS SEC_NAM, @@R_INIS, U, U, 00H, 078H, 00H, 00H 25 25 $DGS SEC_NAM, @@INIS, U, U, 00H, 078H, 00H, 00H 26 26 $DGS SEC_NAM, @@DATS, U, U, 00H, 078H, 00H, 00H 27 27 $DGS SEC_NAM, @@CNSTL, U, U, 00H, 078H, 00H, 00H 28 28 $DGS SEC_NAM, @@RLINIT, U, U, 00H, 078H, 00H, 00H 29 29 $DGS SEC_NAM, @@INITL, U, U, 00H, 078H, 00H, 00H 30 30 $DGS SEC_NAM, @@DATAL, U, U, 00H, 078H, 00H, 00H 31 31 $DGS SEC_NAM, @@CALT, U, U, 00H, 078H, 00H, 00H 32 32 $DGS SEC_NAM, ROM_CODE, U, U, 00H, 078H, 00H, 00H 33 33 $DGS SEC_NAM, @@CODEL, U, U, 00H, 078H, 00H, 00H 34 34 $DGS SEC_NAM, @@BASE, U, U, 00H, 078H, 00H, 00H 35 35 $DGS LAB_SYM, bs_F0085, U, U, 00H, 06H, 00H, 00H 36 36 $DGS LAB_SYM, es_F0085, U, U, 00H, 06H, 00H, 00H 37 37 $DGS LAB_SYM, bs_S0086, U, U, 00H, 06H, 00H, 00H 38 38 $DGS LAB_SYM, es_S0086, U, U, 00H, 06H, 00H, 00H 39 39 $DGS LAB_SYM, bs_S0087, U, U, 00H, 06H, 00H, 00H 40 40 $DGS LAB_SYM, es_S0087, U, U, 00H, 06H, 00H, 00H 41 41 $DGS LAB_SYM, bs_F0084, U, U, 00H, 06H, 00H, 00H 42 42 $DGS LAB_SYM, es_F0084, U, U, 00H, 06H, 00H, 00H 43 43 $DGS STA_SYM, _lpf_coeff, U, U, 05002H, 03H, 01H, 03H 44 44 $DGS AUX_STR, 00H, 00H, 02FH, 02FH, 00H, 00H, 00H, 00H 45 45 $DGS GLV_SYM, _nop8, U, U, 01H, 026H, 01H, 02H 46 46 $DGS AUX_FUN, 00H, U, U, 023H, 00H, 00H 47 47 $DGS BEG_FUN, ??bf_nop8, U, U, 00H, 065H, 01H, 00H 48 48 $DGS AUX_BEG, 04CH, 00H, 023H 49 49 $DGS END_FUN, ??ef_nop8, U, U, 00H, 065H, 01H, 00H 50 50 $DGS AUX_END, 02H 51 51 $DGS GLV_SYM, _iic_mcu_read_a_byte, U, U, 0CH, 026H, 01H, 02H 52 52 $DGS AUX_FUN, 00H, U, U, 03CH, 00H, 00H 53 53 $DGS BEG_FUN, ??bf_iic_mcu_read_a_byte, U, U, 00H, 065H, 01H, 00H 54 54 $DGS AUX_BEG, 057H, 04H, 02AH 55 55 $DGS FUN_ARG, _SLA, 02H, 0FFFFH, 0CH, 09H, 00H, 00H 56 56 $DGS FUN_ARG, _adrs, 0AH, 0FFFFH, 0CH, 09H, 00H, 00H 57 57 $DGS AUT_VAR, _dat, 01H, 0FFFFH, 0CH, 01H, 00H, 00H 58 58 $DGS BEG_BLK, ??bb00_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 59 59 $DGS AUX_BEG, 05H, 00H, 02EH 60 60 $DGS END_BLK, ??eb00_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 61 61 $DGS AUX_END, 0DH 62 62 $DGS BEG_BLK, ??bb01_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 63 63 $DGS AUX_BEG, 010H, 00H, 032H 64 64 $DGS END_BLK, ??eb01_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 65 65 $DGS AUX_END, 012H 66 66 $DGS BEG_BLK, ??bb02_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 67 67 $DGS AUX_BEG, 019H, 00H, 036H 68 68 $DGS END_BLK, ??eb02_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 69 69 $DGS AUX_END, 01DH 70 70 $DGS BEG_BLK, ??bb03_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 71 71 $DGS AUX_BEG, 030H, 00H, 00H 72 72 $DGS END_BLK, ??eb03_iic_mcu_read_a_byte, U, U, 00H, 064H, 01H, 00H 73 73 $DGS AUX_END, 032H 74 74 $DGS END_FUN, ??ef_iic_mcu_read_a_byte, U, U, 00H, 065H, 01H, 00H 75 75 $DGS AUX_END, 039H 76 76 $DGS GLV_SYM, _iic_mcu_read, U, U, 0CH, 026H, 01H, 02H 77 77 $DGS AUX_FUN, 00H, U, U, 05FH, 00H, 00H 78 78 $DGS BEG_FUN, ??bf_iic_mcu_read, U, U, 00H, 065H, 01H, 00H 79 79 $DGS AUX_BEG, 09EH, 02H, 045H 80 80 $DGS FUN_ARG, _slave, 00H, 0FFFFH, 0CH, 09H, 00H, 00H 81 81 $DGS FUN_ARG, _adrs, 08H, 0FFFFH, 0CH, 09H, 00H, 00H 82 82 $DGS FUN_ARG, _len, 0AH, 0FFFFH, 0CH, 09H, 00H, 00H 83 83 $DGS FUN_ARG, _dest, 0CH, 0FFFFH, 0CH, 09H, 01H, 01H 84 84 $DGS AUX_STR, 00H, 00H, 02H, 00H, 00H, 00H, 00H, 01H 85 85 $DGS BEG_BLK, ??bb00_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 86 86 $DGS AUX_BEG, 06H, 00H, 049H 87 87 $DGS END_BLK, ??eb00_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 88 88 $DGS AUX_END, 0EH 89 89 $DGS BEG_BLK, ??bb01_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 90 90 $DGS AUX_BEG, 010H, 00H, 04DH 91 91 $DGS END_BLK, ??eb01_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 92 92 $DGS AUX_END, 012H 93 93 $DGS BEG_BLK, ??bb02_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 94 94 $DGS AUX_BEG, 020H, 00H, 051H 95 95 $DGS END_BLK, ??eb02_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 96 96 $DGS AUX_END, 023H 97 97 $DGS BEG_BLK, ??bb03_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 98 98 $DGS AUX_BEG, 033H, 00H, 053H 99 99 $DGS BEG_BLK, ??bb04_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 100 100 $DGS AUX_BEG, 035H, 00H, 057H 101 101 $DGS END_BLK, ??eb04_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 102 102 $DGS AUX_END, 037H 103 103 $DGS BEG_BLK, ??bb05_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 104 104 $DGS AUX_BEG, 03BH, 00H, 00H 105 105 $DGS END_BLK, ??eb05_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 106 106 $DGS AUX_END, 03DH 107 107 $DGS END_BLK, ??eb03_iic_mcu_read, U, U, 00H, 064H, 01H, 00H 108 108 $DGS AUX_END, 041H 109 109 $DGS END_FUN, ??ef_iic_mcu_read, U, U, 00H, 065H, 01H, 00H 110 110 $DGS AUX_END, 049H 111 111 $DGS GLV_SYM, _iic_mcu_write_a_byte, U, U, 0CH, 026H, 01H, 02H 112 112 $DGS AUX_FUN, 00H, U, U, 074H, 00H, 00H 113 113 $DGS BEG_FUN, ??bf_iic_mcu_write_a_byte, U, U, 00H, 065H, 01H, 00H 114 114 $DGS AUX_BEG, 0F2H, 02H, 066H 115 115 $DGS FUN_ARG, _SLA, 00H, 0FFFFH, 0CH, 09H, 00H, 00H 116 116 $DGS FUN_ARG, _adrs, 08H, 0FFFFH, 0CH, 09H, 00H, 00H 117 117 $DGS FUN_ARG, _dat, 0AH, 0FFFFH, 0CH, 09H, 00H, 00H 118 118 $DGS BEG_BLK, ??bb00_iic_mcu_write_a_byte, U, U, 00H, 064H, 01H, 00H 119 119 $DGS AUX_BEG, 04H, 00H, 06AH 120 120 $DGS END_BLK, ??eb00_iic_mcu_write_a_byte, U, U, 00H, 064H, 01H, 00H 121 121 $DGS AUX_END, 0CH 122 122 $DGS BEG_BLK, ??bb01_iic_mcu_write_a_byte, U, U, 00H, 064H, 01H, 00H 123 123 $DGS AUX_BEG, 0EH, 00H, 06EH 124 124 $DGS END_BLK, ??eb01_iic_mcu_write_a_byte, U, U, 00H, 064H, 01H, 00H 125 125 $DGS AUX_END, 010H 126 126 $DGS BEG_BLK, ??bb02_iic_mcu_write_a_byte, U, U, 00H, 064H, 01H, 00H 127 127 $DGS AUX_BEG, 01AH, 00H, 00H 128 128 $DGS END_BLK, ??eb02_iic_mcu_write_a_byte, U, U, 00H, 064H, 01H, 00H 129 129 $DGS AUX_END, 01DH 130 130 $DGS END_FUN, ??ef_iic_mcu_write_a_byte, U, U, 00H, 065H, 01H, 00H 131 131 $DGS AUX_END, 024H 132 132 $DGS GLV_SYM, _iic_mcu_write, U, U, 0CH, 026H, 01H, 02H 133 133 $DGS AUX_FUN, 00H, U, U, 097H, 00H, 00H 134 134 $DGS BEG_FUN, ??bf_iic_mcu_write, U, U, 00H, 065H, 01H, 00H 135 135 $DGS AUX_BEG, 0129H, 02H, 07DH 136 136 $DGS FUN_ARG, _slave, 00H, 0FFFFH, 0CH, 09H, 00H, 00H 137 137 $DGS FUN_ARG, _adrs, 08H, 0FFFFH, 0CH, 09H, 00H, 00H 138 138 $DGS FUN_ARG, _len, 0AH, 0FFFFH, 0CH, 09H, 00H, 00H 139 139 $DGS FUN_ARG, _src, 0CH, 0FFFFH, 01H, 09H, 01H, 01H 140 140 $DGS AUX_STR, 00H, 00H, 02H, 00H, 00H, 00H, 00H, 01H 141 141 $DGS BEG_BLK, ??bb00_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 142 142 $DGS AUX_BEG, 05H, 00H, 081H 143 143 $DGS END_BLK, ??eb00_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 144 144 $DGS AUX_END, 0DH 145 145 $DGS BEG_BLK, ??bb01_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 146 146 $DGS AUX_BEG, 0FH, 00H, 085H 147 147 $DGS END_BLK, ??eb01_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 148 148 $DGS AUX_END, 011H 149 149 $DGS BEG_BLK, ??bb02_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 150 150 $DGS AUX_BEG, 020H, 00H, 089H 151 151 $DGS END_BLK, ??eb02_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 152 152 $DGS AUX_END, 024H 153 153 $DGS BEG_BLK, ??bb03_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 154 154 $DGS AUX_BEG, 028H, 00H, 08BH 155 155 $DGS BEG_BLK, ??bb04_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 156 156 $DGS AUX_BEG, 02FH, 00H, 091H 157 157 $DGS END_BLK, ??eb04_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 158 158 $DGS AUX_END, 030H 159 159 $DGS END_BLK, ??eb03_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 160 160 $DGS AUX_END, 03EH 161 161 $DGS BEG_BLK, ??bb05_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 162 162 $DGS AUX_BEG, 040H, 00H, 00H 163 163 $DGS END_BLK, ??eb05_iic_mcu_write, U, U, 00H, 064H, 01H, 00H 164 164 $DGS AUX_END, 04AH 165 165 $DGS END_FUN, ??ef_iic_mcu_write, U, U, 00H, 065H, 01H, 00H 166 166 $DGS AUX_END, 04CH 167 167 $DGS GLV_SYM, _int_dma1, U, U, 0E001H, 026H, 01H, 02H 168 168 $DGS AUX_FUN, 00H, U, U, 0AAH, 00H, 00H 169 169 $DGS BEG_FUN, ??bf_int_dma1, U, U, 00H, 065H, 01H, 00H 170 170 $DGS AUX_BEG, 0184H, 016H, 09CH 171 171 $DGS REG_VAR, _i, 0103H, 0FFFFH, 010DH, 04H, 00H, 00H 172 172 $DGS BEG_BLK, ??bb00_int_dma1, U, U, 00H, 064H, 01H, 00H 173 173 $DGS AUX_BEG, 09H, 00H, 09EH 174 174 $DGS BEG_BLK, ??bb01_int_dma1, U, U, 00H, 064H, 01H, 00H 175 175 $DGS AUX_BEG, 0BH, 00H, 0A4H 176 176 $DGS END_BLK, ??eb01_int_dma1, U, U, 00H, 064H, 01H, 00H 177 177 $DGS AUX_END, 0DH 178 178 $DGS END_BLK, ??eb00_int_dma1, U, U, 00H, 064H, 01H, 00H 179 179 $DGS AUX_END, 0EH 180 180 $DGS BEG_BLK, ??bb02_int_dma1, U, U, 00H, 064H, 01H, 00H 181 181 $DGS AUX_BEG, 011H, 00H, 00H 182 182 $DGS END_BLK, ??eb02_int_dma1, U, U, 00H, 064H, 01H, 00H 183 183 $DGS AUX_END, 033H 184 184 $DGS END_FUN, ??ef_int_dma1, U, U, 00H, 065H, 01H, 00H 185 185 $DGS AUX_END, 036H 186 186 $DGS GLV_SYM, _int_iic10, U, U, 0E001H, 026H, 01H, 02H 187 187 $DGS AUX_FUN, 00H, U, U, 0B8H, 00H, 00H 188 188 $DGS BEG_FUN, ??bf_int_iic10, U, U, 00H, 065H, 01H, 00H 189 189 $DGS AUX_BEG, 01C4H, 016H, 0AEH 190 190 $DGS BEG_BLK, ??bb00_int_iic10, U, U, 00H, 064H, 01H, 00H 191 191 $DGS AUX_BEG, 04H, 00H, 0B2H 192 192 $DGS END_BLK, ??eb00_int_iic10, U, U, 00H, 064H, 01H, 00H 193 193 $DGS AUX_END, 09H 194 194 $DGS BEG_BLK, ??bb01_int_iic10, U, U, 00H, 064H, 01H, 00H 195 195 $DGS AUX_BEG, 0EH, 00H, 00H 196 196 $DGS END_BLK, ??eb01_int_iic10, U, U, 00H, 064H, 01H, 00H 197 197 $DGS AUX_END, 030H 198 198 $DGS END_FUN, ??ef_int_iic10, U, U, 00H, 065H, 01H, 00H 199 199 $DGS AUX_END, 033H 200 200 $DGS STA_SYM, _iic_mcu_call_slave, U, U, 0CH, 03H, 01H, 02H 201 201 $DGS AUX_FUN, 00H, U, U, 0C3H, 00H, 00H 202 202 $DGS BEG_FUN, ??bf_iic_mcu_call_slave, U, U, 00H, 065H, 01H, 00H 203 203 $DGS AUX_BEG, 0201H, 02H, 0BDH 204 204 $DGS REG_PAR, _slave, 06H, 0FFFFH, 010CH, 011H, 00H, 00H 205 205 $DGS BEG_BLK, ??bb00_iic_mcu_call_slave, U, U, 00H, 064H, 01H, 00H 206 206 $DGS AUX_BEG, 06H, 00H, 00H 207 207 $DGS END_BLK, ??eb00_iic_mcu_call_slave, U, U, 00H, 064H, 01H, 00H 208 208 $DGS AUX_END, 09H 209 209 $DGS END_FUN, ??ef_iic_mcu_call_slave, U, U, 00H, 065H, 01H, 00H 210 210 $DGS AUX_END, 0CH 211 211 $DGS STA_SYM, _iic_mcu_send_a_byte, U, U, 0CH, 03H, 01H, 02H 212 212 $DGS AUX_FUN, 00H, U, U, 0D2H, 00H, 00H 213 213 $DGS BEG_FUN, ??bf_iic_mcu_send_a_byte, U, U, 00H, 065H, 01H, 00H 214 214 $DGS AUX_BEG, 0215H, 02H, 0C8H 215 215 $DGS REG_PAR, _dat, 06H, 0FFFFH, 010CH, 011H, 00H, 00H 216 216 $DGS BEG_BLK, ??bb00_iic_mcu_send_a_byte, U, U, 00H, 064H, 01H, 00H 217 217 $DGS AUX_BEG, 06H, 00H, 0CCH 218 218 $DGS END_BLK, ??eb00_iic_mcu_send_a_byte, U, U, 00H, 064H, 01H, 00H 219 219 $DGS AUX_END, 08H 220 220 $DGS BEG_BLK, ??bb01_iic_mcu_send_a_byte, U, U, 00H, 064H, 01H, 00H 221 221 $DGS AUX_BEG, 0AH, 00H, 00H 222 222 $DGS END_BLK, ??eb01_iic_mcu_send_a_byte, U, U, 00H, 064H, 01H, 00H 223 223 $DGS AUX_END, 0DH 224 224 $DGS END_FUN, ??ef_iic_mcu_send_a_byte, U, U, 00H, 065H, 01H, 00H 225 225 $DGS AUX_END, 0FH 226 226 $DGS STA_SYM, _iic_mcu_send_st, U, U, 01H, 03H, 01H, 02H 227 227 $DGS AUX_FUN, 00H, U, U, 0D8H, 00H, 00H 228 228 $DGS BEG_FUN, ??bf_iic_mcu_send_st, U, U, 00H, 065H, 01H, 00H 229 229 $DGS AUX_BEG, 022CH, 00H, 0D8H 230 230 $DGS END_FUN, ??ef_iic_mcu_send_st, U, U, 00H, 065H, 01H, 00H 231 231 $DGS AUX_END, 016H 232 232 $DGS STA_SYM, _iic_mcu_send_re_st, U, U, 01H, 03H, 01H, 02H 233 233 $DGS AUX_FUN, 00H, U, U, 0DEH, 00H, 00H 234 234 $DGS BEG_FUN, ??bf_iic_mcu_send_re_st, U, U, 00H, 065H, 01H, 00H 235 235 $DGS AUX_BEG, 0249H, 00H, 0DEH 236 236 $DGS END_FUN, ??ef_iic_mcu_send_re_st, U, U, 00H, 065H, 01H, 00H 237 237 $DGS AUX_END, 022H 238 238 $DGS STA_SYM, _iic_mcu_send_sp, U, U, 01H, 03H, 01H, 02H 239 239 $DGS AUX_FUN, 00H, U, U, 0E4H, 00H, 00H 240 240 $DGS BEG_FUN, ??bf_iic_mcu_send_sp, U, U, 00H, 065H, 01H, 00H 241 241 $DGS AUX_BEG, 0273H, 00H, 0E4H 242 242 $DGS END_FUN, ??ef_iic_mcu_send_sp, U, U, 00H, 065H, 01H, 00H 243 243 $DGS AUX_END, 023H 244 244 $DGS GLV_SYM, _iic_mcu_start, U, U, 01H, 026H, 01H, 02H 245 245 $DGS AUX_FUN, 00H, U, U, 0F2H, 00H, 00H 246 246 $DGS BEG_FUN, ??bf_iic_mcu_start, U, U, 00H, 065H, 01H, 00H 247 247 $DGS AUX_BEG, 029EH, 00H, 0E8H 248 248 $DGS BEG_BLK, ??bb00_iic_mcu_start, U, U, 00H, 064H, 01H, 00H 249 249 $DGS AUX_BEG, 06H, 00H, 0ECH 250 250 $DGS END_BLK, ??eb00_iic_mcu_start, U, U, 00H, 064H, 01H, 00H 251 251 $DGS AUX_END, 06H 252 252 $DGS BEG_BLK, ??bb01_iic_mcu_start, U, U, 00H, 064H, 01H, 00H 253 253 $DGS AUX_BEG, 02AH, 00H, 00H 254 254 $DGS END_BLK, ??eb01_iic_mcu_start, U, U, 00H, 064H, 01H, 00H 255 255 $DGS AUX_END, 02AH 256 256 $DGS END_FUN, ??ef_iic_mcu_start, U, U, 00H, 065H, 01H, 00H 257 257 $DGS AUX_END, 030H 258 258 $DGS GLV_SYM, _iic_mcu_stop, U, U, 01H, 026H, 01H, 02H 259 259 $DGS AUX_FUN, 00H, U, U, 0100H, 00H, 00H 260 260 $DGS BEG_FUN, ??bf_iic_mcu_stop, U, U, 00H, 065H, 01H, 00H 261 261 $DGS AUX_BEG, 02D6H, 00H, 0F6H 262 262 $DGS BEG_BLK, ??bb00_iic_mcu_stop, U, U, 00H, 064H, 01H, 00H 263 263 $DGS AUX_BEG, 03H, 00H, 0FAH 264 264 $DGS END_BLK, ??eb00_iic_mcu_stop, U, U, 00H, 064H, 01H, 00H 265 265 $DGS AUX_END, 04H 266 266 $DGS BEG_BLK, ??bb01_iic_mcu_stop, U, U, 00H, 064H, 01H, 00H 267 267 $DGS AUX_BEG, 06H, 00H, 00H 268 268 $DGS END_BLK, ??eb01_iic_mcu_stop, U, U, 00H, 064H, 01H, 00H 269 269 $DGS AUX_END, 06H 270 270 $DGS END_FUN, ??ef_iic_mcu_stop, U, U, 00H, 065H, 01H, 00H 271 271 $DGS AUX_END, 09H 272 272 $DGS GLV_SYM, _iic_mcu_wo_dma, U, U, 034CH, 027H, 00H, 00H 273 273 $DGS GLV_SYM, _iic_mcu_busy, U, U, 0134CH, 027H, 00H, 00H 274 274 $DGS GLV_SYM, _iic_mcu_initialized, U, U, 0134CH, 027H, 00H, 00H 275 275 $DGS GLV_SYM, _iic_send_work, U, U, 0CH, 026H, 01H, 03H 276 276 $DGS AUX_STR, 00H, 00H, 04H, 04H, 00H, 00H, 00H, 00H 277 277 $DGS GLV_SYM, _p_iic_send_wo_dma_dat, U, U, 0CH, 026H, 01H, 01H 278 278 $DGS AUX_STR, 00H, 00H, 02H, 00H, 00H, 00H, 00H, 01H 279 279 $DGS GLV_SYM, _iic_send_wo_dma_len, U, U, 0CH, 026H, 00H, 00H 280 280 $DGS GLV_SYM, _iic_mcu_bus_status, U, U, 0CH, 026H, 00H, 00H 281 281 $DGS GLV_SYM, _@SEGAX, U, U, 00H, 02H, 00H, 00H 282 282 $DGS GLV_SYM, _@SEGDE, U, U, 00H, 02H, 00H, 00H 283 283 $DGS GLV_SYM, _@RTARG0, U, U, 00H, 02H, 00H, 00H 284 284 285 285 EXTRN _@SEGAX 286 286 EXTRN _@SEGDE 287 287 EXTRN _@RTARG0 288 288 PUBLIC _iic_mcu_wo_dma 289 289 PUBLIC _iic_mcu_busy 290 290 PUBLIC _iic_mcu_initialized 291 291 PUBLIC _iic_send_work 292 292 PUBLIC _p_iic_send_wo_dma_dat 293 293 PUBLIC _iic_send_wo_dma_len 294 294 PUBLIC _iic_mcu_bus_status 295 295 PUBLIC _nop8 296 296 PUBLIC _iic_mcu_read_a_byte 297 297 PUBLIC _iic_mcu_read 298 298 PUBLIC _iic_mcu_write_a_byte 299 299 PUBLIC _iic_mcu_write 300 300 PUBLIC _int_dma1 301 301 PUBLIC _int_iic10 302 302 PUBLIC _iic_mcu_start 303 303 PUBLIC _iic_mcu_stop 304 304 305 305 ----- @@BITS BSEG 306 306 00000.0 _iic_mcu_wo_dma DBIT 307 307 00000.1 _iic_mcu_busy DBIT 308 308 00000.2 _iic_mcu_initialized DBIT 309 309 310 310 ----- @@CNST CSEG MIRRORP 311 311 00000 01 _lpf_coeff: DB 01H ; 1 312 312 00001 02 DB 02H ; 2 313 313 00002 02 DB 02H ; 2 314 314 00003 03 DB 03H ; 3 315 315 00004 03 DB 03H ; 3 316 316 00005 02 DB 02H ; 2 317 317 00006 00 DB 00H ; 0 318 318 00007 FE DB 0FEH ; 254 319 319 00008 FB DB 0FBH ; 251 320 320 00009 F7 DB 0F7H ; 247 321 321 0000A F3 DB 0F3H ; 243 322 322 0000B F0 DB 0F0H ; 240 323 323 0000C F0 DB 0F0H ; 240 324 324 0000D F3 DB 0F3H ; 243 325 325 0000E FA DB 0FAH ; 250 326 326 0000F 04 DB 04H ; 4 327 327 00010 12 DB 012H ; 18 328 328 00011 25 DB 025H ; 37 329 329 00012 38 DB 038H ; 56 330 330 00013 4D DB 04DH ; 77 331 331 00014 5F DB 05FH ; 95 332 332 00015 6E DB 06EH ; 110 333 333 00016 77 DB 077H ; 119 334 334 00017 7A DB 07AH ; 122 335 335 00018 77 DB 077H ; 119 336 336 00019 6E DB 06EH ; 110 337 337 0001A 5F DB 05FH ; 95 338 338 0001B 4D DB 04DH ; 77 339 339 0001C 38 DB 038H ; 56 340 340 0001D 25 DB 025H ; 37 341 341 0001E 12 DB 012H ; 18 342 342 0001F 04 DB 04H ; 4 343 343 00020 FA DB 0FAH ; 250 344 344 00021 F3 DB 0F3H ; 243 345 345 00022 F0 DB 0F0H ; 240 346 346 00023 F0 DB 0F0H ; 240 347 347 00024 F3 DB 0F3H ; 243 348 348 00025 F7 DB 0F7H ; 247 349 349 00026 FB DB 0FBH ; 251 350 350 00027 FE DB 0FEH ; 254 351 351 00028 00 DB 00H ; 0 352 352 00029 02 DB 02H ; 2 353 353 0002A 03 DB 03H ; 3 354 354 0002B 03 DB 03H ; 3 355 355 0002C 02 DB 02H ; 2 356 356 0002D 02 DB 02H ; 2 357 357 0002E 01 DB 01H ; 1 358 358 0002F 00 DB (1) 359 359 360 360 ----- @@R_INIT CSEG UNIT64KP 361 361 362 362 ----- @@INIT DSEG BASEP 363 363 364 364 ----- @@DATA DSEG BASEP 365 365 00000 _iic_send_work: DS (4) 366 366 00004 _p_iic_send_wo_dma_dat: DS (2) 367 367 00006 _iic_send_wo_dma_len: DS (1) 368 368 00007 _iic_mcu_bus_status: DS (1) 369 369 370 370 ----- @@R_INIS CSEG UNIT64KP 371 371 372 372 ----- @@INIS DSEG SADDRP 373 373 374 374 ----- @@DATS DSEG SADDRP 375 375 376 376 ----- @@CNSTL CSEG PAGE64KP 377 377 378 378 ----- @@RLINIT CSEG UNIT64KP 379 379 380 380 ----- @@INITL DSEG UNIT64KP 381 381 382 382 ----- @@DATAL DSEG UNIT64KP 383 383 384 384 ----- @@CALT CSEG CALLT0 385 385 386 386 ; Sub-Routines created by CC78K0R 387 387 388 388 ----- ROM_CODE CSEG BASE 389 389 00000 bs_F0085: 390 390 00000 318E shrw ax,8 ;[INF] 2, 1 391 391 00002 REDC701 br !_iic_mcu_send_a_byte ;[INF] 3, 3 392 392 00005 es_F0085: 393 393 394 394 ----- ROM_CODE CSEG BASE 395 395 00005 bs_S0086: 396 396 00005 300400 movw ax,#04H ; 4 ;[INF] 3, 1 397 397 00008 BF2401 movw !ST0,ax ;[INF] 3, 1 398 398 0000B D7 ret ;[INF] 1, 6 399 399 0000C es_S0086: 400 400 401 401 ----- ROM_CODE CSEG BASE 402 402 0000C bs_S0087: 403 403 0000C 300400 movw ax,#04H ; 4 ;[INF] 3, 1 404 404 0000F BF2201 movw !SS0,ax ;[INF] 3, 1 405 405 00012 D7 ret ;[INF] 1, 6 406 406 00013 es_S0087: 407 407 408 408 ----- ROM_CODE CSEG BASE 409 409 00013 bs_F0084: 410 410 00013 8B mov a,[hl] ;[INF] 1, 1 411 411 00014 318E shrw ax,8 ;[INF] 2, 1 412 412 00016 RFDB101 call !_iic_mcu_call_slave ;[INF] 3, 3 413 413 00019 D2 cmp0 c ;[INF] 1, 1 414 414 0001A D7 ret ;[INF] 1, 6 415 415 0001B es_F0084: 416 416 417 417 ; *** Sub-Routine Information *** 418 418 ; 419 419 ; $SUB bs_F0084 420 420 ; CODE SIZE= 8 bytes 421 421 ; 422 422 ; $SUB bs_F0085 423 423 ; CODE SIZE= 5 bytes 424 424 ; 425 425 ; $SUB bs_S0086 426 426 ; CODE SIZE= 7 bytes 427 427 ; 428 428 ; $SUB bs_S0087 429 429 ; CODE SIZE= 7 bytes 430 430 431 431 ; End of Sub-Routines 432 432 433 433 ; line 1 : /* ======================================================== 434 434 ; line 2 : 簡易I2C(内蔵ペリフェラル使用)通信 435 435 ; line 3 : de JHL 藤田@開技 436 436 ; line 4 : '09 Feb - 437 437 ; line 5 : ======================================================== */ 438 438 ; line 6 : #pragma sfr 439 439 ; line 7 : #pragma di 440 440 ; line 8 : #pragma ei 441 441 ; line 9 : #pragma nop 442 442 ; line 10 : #pragma inline // memcpy()をインライン展開する 443 443 ; line 11 : 444 444 ; line 12 : #include "incs.h" 445 445 ; line 13 : #include "i2c_mcu.h" 446 446 ; line 14 : 447 447 ; line 15 : 448 448 ; line 16 : 449 449 ; line 17 : // ======================================================== 450 450 ; line 18 : // レジスタのビット名 451 451 ; line 19 : // プリフィックスbだが、一部のビット名がレジスタ名にかぶるため.. 452 452 ; . 453 453 ; line 20 : // SMR0n 454 454 ; line 21 : #define bCKS0 ( 1 << 15 ) 455 455 ; line 22 : #define bCCS0 ( 1 << 14 ) 456 456 ; line 23 : #define bSTS0 ( 1 << 8 ) 457 457 ; line 24 : #define bSIS0 ( 1 << 6 ) 458 458 ; line 25 : #define bMD0n2 ( 1 << 2 ) 459 459 ; line 26 : #define bMD0n1 ( 1 << 1 ) 460 460 ; line 27 : #define bMD0n0 ( 1 << 0 ) 461 461 ; line 28 : #define bSMR0n_FIXEDBIT ( 1 << 5 ) 462 462 ; line 29 : 463 463 ; line 30 : // SSR0n 464 464 ; line 31 : #define bit_TSF0 6 465 465 ; line 32 : #define PEF0 ( 1 << 1 ) 466 466 ; line 33 : 467 467 ; line 34 : // SIR0n 468 468 ; line 35 : #define PECT0 ( 1 << 1 ) 469 469 ; line 36 : 470 470 ; line 37 : // SCR0n 471 471 ; line 38 : #define TXE0 ( 1 << 15 ) 472 472 ; line 39 : #define RXE0 ( 1 << 14 ) 473 473 ; line 40 : #define SLC02 4 474 474 ; line 41 : #define DLS02 0 475 475 ; line 42 : #define TSF0 ( 1 << 6 ) 476 476 ; line 43 : 477 477 ; line 44 : // SOn 478 478 ; line 45 : #define TAUS_MASK 0b0000101100001011; 479 479 ; line 46 : 480 480 ; line 47 : // DMCn 481 481 ; line 48 : #define DRS ( 1 << 6 ) 482 482 ; line 49 : 483 483 ; line 50 : 484 484 ; line 51 : 485 485 ; line 52 : 486 486 ; line 53 : // ======================================================== 487 487 ; line 54 : static void iic_mcu_send_st( ); 488 488 ; line 55 : static void iic_mcu_send_re_st( ); 489 489 ; line 56 : static void iic_mcu_send_sp( ); 490 490 ; line 57 : static err iic_mcu_send_a_byte( u8 ); 491 491 ; line 58 : static err iic_mcu_call_slave( u8 slave ); 492 492 ; line 59 : 493 493 ; line 60 : 494 494 ; line 61 : 495 495 ; line 62 : // ======================================================== 496 496 ; line 63 : bit iic_mcu_wo_dma; 497 497 ; line 64 : volatile bit iic_mcu_busy; 498 498 ; line 65 : volatile bit iic_mcu_initialized; 499 499 ; line 66 : 500 500 ; line 67 : 501 501 ; line 68 : u8 iic_send_work[4]; 502 502 ; line 69 : u8 *p_iic_send_wo_dma_dat; 503 503 ; line 70 : u8 iic_send_wo_dma_len; 504 504 ; line 71 : 505 505 ; line 72 : u8 iic_mcu_bus_status; // 一文字リードの時はデータを返す 506 506 ; 。 507 507 ; line 73 : // ステータスが必要ならこっちを呼 508 508 ; んで 509 509 ; line 74 : 510 510 ; line 75 : void nop8() 511 511 ; line 76 : { 512 512 513 513 ----- ROM_CODE CSEG BASE 514 514 0001B _nop8: 515 515 $DGL 1,29 516 516 0001B ??bf_nop8: 517 517 ; line 77 : } 518 518 $DGL 0,2 519 519 0001B ??ef_nop8: 520 520 0001B D7 ret ;[INF] 1, 6 521 521 0001C ??ee_nop8: 522 522 ; line 78 : 523 523 ; line 79 : 524 524 ; line 80 : 525 525 ; line 81 : /* ======================================================== 526 526 ; line 82 : スレーブからの 『1文字』 リード 527 527 ; line 83 : 返値がデータそのものです。 528 528 ; line 84 : エラー判定ができません。 529 529 ; line 85 : ======================================================== */ 530 530 ; line 86 : u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ) 531 531 ; line 87 : { 532 532 0001C _iic_mcu_read_a_byte: 533 533 $DGL 1,35 534 534 0001C C7 push hl ;[INF] 1, 1 535 535 0001D C1 push ax ;[INF] 1, 1 536 536 0001E C1 push ax ;[INF] 1, 1 537 537 0001F FBF8FF movw hl,sp ;[INF] 3, 1 538 538 00022 ??bf_iic_mcu_read_a_byte: 539 539 ; line 88 : u8 dat; 540 540 ; line 89 : 541 541 ; line 90 : if( iic_mcu_initialized == 0 ) 542 542 $DGL 0,4 543 543 00022 R31220003 bt _iic_mcu_initialized,$?L0005 ;[INF] 4, 5 544 544 ; line 91 : { 545 545 00026 ??bb00_iic_mcu_read_a_byte: 546 546 ; line 92 : #ifdef _debug_ 547 547 ; line 93 : iic_mcu_start( ); 548 548 $DGL 0,7 549 549 00026 RFD5902 call !_iic_mcu_start ;[INF] 3, 3 550 550 00029 ??eb00_iic_mcu_read_a_byte: 551 551 ; line 94 : #else 552 552 ; line 95 : while( 1 ) 553 553 ; line 96 : { 554 554 ; line 97 : } 555 555 ; line 98 : #endif 556 556 ; line 99 : } 557 557 00029 ?L0005: 558 558 ; line 100 : 559 559 ; line 101 : while( iic_mcu_busy ) 560 560 $DGL 0,15 561 561 00029 R31140003 bf _iic_mcu_busy,$?L0008 ;[INF] 4, 5 562 562 ; line 102 : { 563 563 0002D ??bb01_iic_mcu_read_a_byte: 564 564 ; line 103 : NOP( ); 565 565 $DGL 0,17 566 566 0002D 00 nop ;[INF] 1, 1 567 567 0002E ??eb01_iic_mcu_read_a_byte: 568 568 ; line 104 : } 569 569 $DGL 0,18 570 570 0002E EFF9 br $?L0005 ;[INF] 2, 3 571 571 00030 ?L0008: 572 572 ; line 105 : iic_mcu_busy = 1; 573 573 $DGL 0,19 574 574 00030 R711200 set1 _iic_mcu_busy ;[INF] 3, 2 575 575 ; line 106 : 576 576 ; line 107 : iic_mcu_bus_status = ERR_OK; 577 577 $DGL 0,21 578 578 00033 RF50700 clrb !_iic_mcu_bus_status ;[INF] 3, 1 579 579 ; line 108 : 580 580 ; line 109 : // スタートコンディションとスレーブの呼び出し、レジスタアドレ 581 581 ; スの送信 582 582 ; line 110 : if( iic_mcu_call_slave( SLA ) != 0 ) 583 583 $DGL 0,24 584 584 00036 8C02 mov a,[hl+2] ; SLA ;[INF] 2, 1 585 585 00038 318E shrw ax,8 ;[INF] 2, 1 586 586 0003A RFDB101 call !_iic_mcu_call_slave ;[INF] 3, 3 587 587 0003D D2 cmp0 c ;[INF] 1, 1 588 588 0003E DD0A bz $?L0009 ;[INF] 2, 4 589 589 ; line 111 : { 590 590 00040 ??bb02_iic_mcu_read_a_byte: 591 591 ; line 112 : iic_mcu_bus_status = ERR_NOSLAVE; 592 592 $DGL 0,26 593 593 00040 RCF070002 mov !_iic_mcu_bus_status,#02H ; 2 ;[INF] 4, 1 594 594 ; line 113 : iic_mcu_busy = 0; 595 595 $DGL 0,27 596 596 00044 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 597 597 ; line 114 : return ( 0 ); 598 598 $DGL 0,28 599 599 00047 F7 clrw bc ;[INF] 1, 1 600 600 00048 EF3D br $?L0004 ;[INF] 2, 3 601 601 0004A ??eb02_iic_mcu_read_a_byte: 602 602 ; line 115 : } 603 603 0004A ?L0009: 604 604 ; line 116 : 605 605 ; line 117 : // レジスタアドレスの送信 606 606 ; line 118 : iic_mcu_send_a_byte( adrs ); // 終わるまで帰ってこない 607 607 $DGL 0,32 608 608 0004A 8C0A mov a,[hl+10] ; adrs ;[INF] 2, 1 609 609 0004C RFD0000 call !bs_F0085 ;[INF] 3, 3 610 610 ; line 119 : // if( err != ERR_SUCCESS )〜 611 611 ; line 120 : 612 612 ; line 121 : // データ受信 // 613 613 ; line 122 : iic_mcu_send_re_st( ); // リスタートコンディション 614 614 $DGL 0,36 615 615 0004F RFD1002 call !_iic_mcu_send_re_st ;[INF] 3, 3 616 616 ; line 123 : iic_mcu_send_a_byte( SLA | 0x01 ); // 送信完了まで戻ってきま 617 617 ; せん。 618 618 $DGL 0,37 619 619 00052 8C02 mov a,[hl+2] ; SLA ;[INF] 2, 1 620 620 00054 6C01 or a,#01H ; 1 ;[INF] 2, 1 621 621 00056 RFD0000 call !bs_F0085 ;[INF] 3, 3 622 622 ; line 124 : 623 623 ; line 125 : ST0 = 0x0004; // 受信モードに設定を変えるのでロ 624 624 ; ジック停止 625 625 $DGL 0,39 626 626 00059 RFD0500 call !bs_S0086 ;[INF] 3, 3 627 627 ; line 126 : SCR02 = RXE0 | 1 << SLC02 | 7 << DLS02; // 受信設定 628 628 $DGL 0,40 629 629 0005C 301740 movw ax,#04017H ; 16407 ;[INF] 3, 1 630 630 0005F BF1C01 movw !SCR02,ax ;[INF] 3, 1 631 631 ; line 127 : SS0 = 0x0004; // 通信待機 632 632 $DGL 0,41 633 633 00062 RFD0C00 call !bs_S0087 ;[INF] 3, 3 634 634 ; line 128 : 635 635 ; line 129 : SOE0 = 0x0000; // 1バイト送信なので、最後のNAKを 636 636 ; 送る 637 637 $DGL 0,43 638 638 00065 F6 clrw ax ;[INF] 1, 1 639 639 00066 BF2A01 movw !SOE0,ax ;[INF] 3, 1 640 640 ; line 130 : IICIF10 = 0; 641 641 $DGL 0,44 642 642 00069 710BE2 clr1 IF1L.0 ;[INF] 3, 2 643 643 ; line 131 : SIO10 = 0xFF; // ダミーデータを書くと受信開始 644 644 $DGL 0,45 645 645 0006C CE44FF mov SIO10,#0FFH ; 255 ;[INF] 3, 1 646 646 ; line 132 : 647 647 ; line 133 : while( IICIF10 == 0 ) 648 648 $DGL 0,47 649 649 0006F ?L0011: 650 650 0006F 3182E202 bt IF1L.0,$?L0012 ;[INF] 4, 5 651 651 ; line 134 : { // 受信完了待ち 652 652 00073 ??bb03_iic_mcu_read_a_byte: 653 653 ; line 135 : ; 654 654 00073 ??eb03_iic_mcu_read_a_byte: 655 655 ; line 136 : } 656 656 $DGL 0,50 657 657 00073 EFFA br $?L0011 ;[INF] 2, 3 658 658 00075 ?L0012: 659 659 ; line 137 : dat = SIO10; 660 660 $DGL 0,51 661 661 00075 8E44 mov a,SIO10 ;[INF] 2, 1 662 662 00077 9C01 mov [hl+1],a ; dat ;[INF] 2, 1 663 663 ; line 138 : 664 664 ; line 139 : iic_mcu_send_sp( ); 665 665 $DGL 0,53 666 666 00079 RFD3902 call !_iic_mcu_send_sp ;[INF] 3, 3 667 667 ; line 140 : IICIF10 = 0; // 後を濁さないこと 668 668 $DGL 0,54 669 669 0007C 710BE2 clr1 IF1L.0 ;[INF] 3, 2 670 670 ; line 141 : iic_mcu_busy = 0; 671 671 $DGL 0,55 672 672 0007F R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 673 673 ; line 142 : return ( dat ); 674 674 $DGL 0,56 675 675 00082 8C01 mov a,[hl+1] ; dat ;[INF] 2, 1 676 676 00084 318E shrw ax,8 ;[INF] 2, 1 677 677 00086 12 movw bc,ax ;[INF] 1, 1 678 678 ; line 143 : } 679 679 00087 ?L0004: 680 680 $DGL 0,57 681 681 00087 ??ef_iic_mcu_read_a_byte: 682 682 00087 1004 addw sp,#04H ;[INF] 2, 1 683 683 00089 C6 pop hl ;[INF] 1, 1 684 684 0008A D7 ret ;[INF] 1, 6 685 685 0008B ??ee_iic_mcu_read_a_byte: 686 686 ; line 144 : 687 687 ; line 145 : 688 688 ; line 146 : 689 689 ; line 147 : /* ======================================================== 690 690 ; line 148 : スレーブからのリード 691 691 ; line 149 : 0 正常終了 692 692 ; line 150 : 1 スレーブが応答しない 693 693 ; line 151 : 2 バスが誰かに占有されていてタイムアウト 694 694 ; line 152 : 3 意味不明エラー 695 695 ; line 153 : 【注】 696 696 ; line 154 : スレーブがウェイトコンディションを出すことは禁止です。 697 697 ; line 155 : その場合でもエラー検出などできません 698 698 ; line 156 : ======================================================== */ 699 699 ; line 157 : err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest ) 700 700 ; line 158 : { 701 701 0008B _iic_mcu_read: 702 702 $DGL 1,60 703 703 0008B C7 push hl ;[INF] 1, 1 704 704 0008C C1 push ax ;[INF] 1, 1 705 705 0008D FBF8FF movw hl,sp ;[INF] 3, 1 706 706 00090 ??bf_iic_mcu_read: 707 707 ; line 159 : 708 708 ; line 160 : //* 709 709 ; line 161 : // 使用中なら待つ 710 710 ; line 162 : if( iic_mcu_initialized == 0 ) 711 711 $DGL 0,5 712 712 00090 R31220003 bt _iic_mcu_initialized,$?L0015 ;[INF] 4, 5 713 713 ; line 163 : { 714 714 00094 ??bb00_iic_mcu_read: 715 715 ; line 164 : #ifdef _debug_ 716 716 ; line 165 : iic_mcu_start( ); 717 717 $DGL 0,8 718 718 00094 RFD5902 call !_iic_mcu_start ;[INF] 3, 3 719 719 00097 ??eb00_iic_mcu_read: 720 720 ; line 166 : #else 721 721 ; line 167 : while( 1 ) 722 722 ; line 168 : { 723 723 ; line 169 : } 724 724 ; line 170 : #endif 725 725 ; line 171 : } 726 726 00097 ?L0015: 727 727 ; line 172 : while( iic_mcu_busy ) 728 728 $DGL 0,15 729 729 00097 R31140003 bf _iic_mcu_busy,$?L0018 ;[INF] 4, 5 730 730 ; line 173 : { 731 731 0009B ??bb01_iic_mcu_read: 732 732 ; line 174 : NOP( ); 733 733 $DGL 0,17 734 734 0009B 00 nop ;[INF] 1, 1 735 735 0009C ??eb01_iic_mcu_read: 736 736 ; line 175 : } 737 737 $DGL 0,18 738 738 0009C EFF9 br $?L0015 ;[INF] 2, 3 739 739 0009E ?L0018: 740 740 ; line 176 : /*/ 741 741 ; line 177 : // 使用中なら帰る 742 742 ; line 178 : if( iic_mcu_initialized == 0 ){ 743 743 ; line 179 : return(0x80); 744 744 ; line 180 : } 745 745 ; line 181 : if( iic_mcu_busy != 0 ){ 746 746 ; line 182 : return( 3 ); 747 747 ; line 183 : } 748 748 ; line 184 : //*/ 749 749 ; line 185 : 750 750 ; line 186 : iic_mcu_busy = 1; 751 751 $DGL 0,29 752 752 0009E R711200 set1 _iic_mcu_busy ;[INF] 3, 2 753 753 ; line 187 : // スタートコンディションとスレーブの呼び出し、レジスタアドレ 754 754 ; スの送信 755 755 ; line 188 : if( iic_mcu_call_slave( slave ) != 0 ) 756 756 $DGL 0,31 757 757 000A1 RFD1300 call !bs_F0084 ;[INF] 3, 3 758 758 000A4 DD07 bz $?L0019 ;[INF] 2, 4 759 759 ; line 189 : { 760 760 000A6 ??bb02_iic_mcu_read: 761 761 ; line 190 : iic_mcu_busy = 0; 762 762 $DGL 0,33 763 763 000A6 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 764 764 ; line 191 : return ( ERR_NOSLAVE ); 765 765 $DGL 0,34 766 766 000A9 E7 onew bc ;[INF] 1, 1 767 767 000AA A3 incw bc ;[INF] 1, 1 768 768 000AB EF4A br $?L0014 ;[INF] 2, 3 769 769 000AD ??eb02_iic_mcu_read: 770 770 ; line 192 : } 771 771 000AD ?L0019: 772 772 ; line 193 : 773 773 ; line 194 : // レジスタアドレスの送信 774 774 ; line 195 : iic_mcu_send_a_byte( adrs ); // 終わるまで帰ってこない 775 775 $DGL 0,38 776 776 000AD 8C08 mov a,[hl+8] ; adrs ;[INF] 2, 1 777 777 000AF RFD0000 call !bs_F0085 ;[INF] 3, 3 778 778 ; line 196 : // if( err != ERR_SUCCESS )〜 779 779 ; line 197 : 780 780 ; line 198 : // データ受信 // 781 781 ; line 199 : iic_mcu_send_re_st( ); // リスタートコンディション 782 782 $DGL 0,42 783 783 000B2 RFD1002 call !_iic_mcu_send_re_st ;[INF] 3, 3 784 784 ; line 200 : iic_mcu_send_a_byte( slave | 0x01 ); // 送信完了まで戻 785 785 ; ってきません。 786 786 $DGL 0,43 787 787 000B5 8B mov a,[hl] ; slave ;[INF] 1, 1 788 788 000B6 6C01 or a,#01H ; 1 ;[INF] 2, 1 789 789 000B8 RFD0000 call !bs_F0085 ;[INF] 3, 3 790 790 ; line 201 : 791 791 ; line 202 : // データ受信 792 792 ; line 203 : ST0 = 0x0004; // 受信モードに設定を変えるのでロ 793 793 ; ジック停止 794 794 $DGL 0,46 795 795 000BB RFD0500 call !bs_S0086 ;[INF] 3, 3 796 796 ; line 204 : SCR02 = RXE0 | 1 << SLC02 | 7 << DLS02; // 受信設定 797 797 $DGL 0,47 798 798 000BE 301740 movw ax,#04017H ; 16407 ;[INF] 3, 1 799 799 000C1 BF1C01 movw !SCR02,ax ;[INF] 3, 1 800 800 ; line 205 : SS0 = 0x0004; // 通信待機 801 801 $DGL 0,48 802 802 000C4 RFD0C00 call !bs_S0087 ;[INF] 3, 3 803 803 ; line 206 : 804 804 ; line 207 : do 805 805 000C7 ?L0021: 806 806 ; line 208 : { 807 807 000C7 ??bb03_iic_mcu_read: 808 808 ; line 209 : if( len == 1 ) 809 809 $DGL 0,52 810 810 000C7 8C0A mov a,[hl+10] ; len ;[INF] 2, 1 811 811 000C9 91 dec a ;[INF] 1, 1 812 812 000CA DF04 bnz $?L0024 ;[INF] 2, 4 813 813 ; line 210 : { 814 814 000CC ??bb04_iic_mcu_read: 815 815 ; line 211 : SOE0 = 0x0000; // 最後のNAK 816 816 $DGL 0,54 817 817 000CC F6 clrw ax ;[INF] 1, 1 818 818 000CD BF2A01 movw !SOE0,ax ;[INF] 3, 1 819 819 000D0 ??eb04_iic_mcu_read: 820 820 ; line 212 : } 821 821 000D0 ?L0024: 822 822 ; line 213 : IICIF10 = 0; 823 823 $DGL 0,56 824 824 000D0 710BE2 clr1 IF1L.0 ;[INF] 3, 2 825 825 ; line 214 : SIO10 = 0xFF; // ダミーデータを書くと受信開始 826 826 $DGL 0,57 827 827 000D3 CE44FF mov SIO10,#0FFH ; 255 ;[INF] 3, 1 828 828 ; line 215 : while( IICIF10 == 0 ) 829 829 $DGL 0,58 830 830 000D6 ?L0026: 831 831 000D6 3182E202 bt IF1L.0,$?L0027 ;[INF] 4, 5 832 832 ; line 216 : { // 受信完了待ち 833 833 000DA ??bb05_iic_mcu_read: 834 834 ; line 217 : ; 835 835 000DA ??eb05_iic_mcu_read: 836 836 ; line 218 : } 837 837 $DGL 0,61 838 838 000DA EFFA br $?L0026 ;[INF] 2, 3 839 839 000DC ?L0027: 840 840 ; line 219 : *dest = SIO10; 841 841 $DGL 0,62 842 842 000DC AC0C movw ax,[hl+12] ; dest ;[INF] 2, 1 843 843 000DE 14 movw de,ax ;[INF] 1, 1 844 844 000DF 8E44 mov a,SIO10 ;[INF] 2, 1 845 845 000E1 99 mov [de],a ;[INF] 1, 1 846 846 ; line 220 : dest++; 847 847 $DGL 0,63 848 848 000E2 61790C incw [hl+12] ; dest ;[INF] 3, 2 849 849 ; line 221 : len--; 850 850 $DGL 0,64 851 851 000E5 61690A dec [hl+10] ; len ;[INF] 3, 2 852 852 000E8 ??eb03_iic_mcu_read: 853 853 ; line 222 : } 854 854 ; line 223 : while( len != 0 ); 855 855 $DGL 0,66 856 856 000E8 8C0A mov a,[hl+10] ; len ;[INF] 2, 1 857 857 000EA D1 cmp0 a ;[INF] 1, 1 858 858 000EB DFDA bnz $?L0021 ;[INF] 2, 4 859 859 ; line 224 : 860 860 ; line 225 : iic_mcu_send_sp( ); 861 861 $DGL 0,68 862 862 000ED RFD3902 call !_iic_mcu_send_sp ;[INF] 3, 3 863 863 ; line 226 : 864 864 ; line 227 : IICIF10 = 0; 865 865 $DGL 0,70 866 866 000F0 710BE2 clr1 IF1L.0 ;[INF] 3, 2 867 867 ; line 228 : iic_mcu_busy = 0; 868 868 $DGL 0,71 869 869 000F3 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 870 870 ; line 229 : return ( ERR_SUCCESS ); 871 871 $DGL 0,72 872 872 000F6 F7 clrw bc ;[INF] 1, 1 873 873 ; line 230 : } 874 874 000F7 ?L0014: 875 875 $DGL 0,73 876 876 000F7 ??ef_iic_mcu_read: 877 877 000F7 C0 pop ax ;[INF] 1, 1 878 878 000F8 C6 pop hl ;[INF] 1, 1 879 879 000F9 D7 ret ;[INF] 1, 6 880 880 000FA ??ee_iic_mcu_read: 881 881 ; line 231 : 882 882 ; line 232 : 883 883 ; line 233 : 884 884 ; line 234 : 885 885 ; line 235 : /* ======================================================== 886 886 ; line 236 : スレーブへ 『1バイト』 ライト 887 887 ; line 237 : 前の転送が終わるのを待って、ライトします。 888 888 ; line 238 : 返値 iic_mcu_write に同じ 889 889 ; line 239 : 890 890 ; line 240 : ======================================================== */ 891 891 ; line 241 : err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat ) 892 892 ; line 242 : { 893 893 000FA _iic_mcu_write_a_byte: 894 894 $DGL 1,95 895 895 000FA C7 push hl ;[INF] 1, 1 896 896 000FB C1 push ax ;[INF] 1, 1 897 897 000FC FBF8FF movw hl,sp ;[INF] 3, 1 898 898 000FF ??bf_iic_mcu_write_a_byte: 899 899 ; line 243 : 900 900 ; line 244 : if( iic_mcu_initialized == 0 ) 901 901 $DGL 0,3 902 902 000FF R31220003 bt _iic_mcu_initialized,$?L0030 ;[INF] 4, 5 903 903 ; line 245 : { 904 904 00103 ??bb00_iic_mcu_write_a_byte: 905 905 ; line 246 : #ifdef _debug_ 906 906 ; line 247 : iic_mcu_start( ); 907 907 $DGL 0,6 908 908 00103 RFD5902 call !_iic_mcu_start ;[INF] 3, 3 909 909 00106 ??eb00_iic_mcu_write_a_byte: 910 910 ; line 248 : #else 911 911 ; line 249 : while( 1 ) 912 912 ; line 250 : { 913 913 ; line 251 : } 914 914 ; line 252 : #endif 915 915 ; line 253 : } 916 916 00106 ?L0030: 917 917 ; line 254 : while( iic_mcu_busy ) 918 918 $DGL 0,13 919 919 00106 R31140003 bf _iic_mcu_busy,$?L0033 ;[INF] 4, 5 920 920 ; line 255 : { 921 921 0010A ??bb01_iic_mcu_write_a_byte: 922 922 ; line 256 : NOP( ); 923 923 $DGL 0,15 924 924 0010A 00 nop ;[INF] 1, 1 925 925 0010B ??eb01_iic_mcu_write_a_byte: 926 926 ; line 257 : } 927 927 $DGL 0,16 928 928 0010B EFF9 br $?L0030 ;[INF] 2, 3 929 929 0010D ?L0033: 930 930 ; line 258 : iic_mcu_busy = 1; 931 931 $DGL 0,17 932 932 0010D R711200 set1 _iic_mcu_busy ;[INF] 3, 2 933 933 ; line 259 : #if 0 934 934 ; line 260 : temp = dat; 935 935 ; line 261 : return ( iic_mcu_write( SLA, adrs, 1, &temp ) ); 936 936 ; line 262 : } 937 937 ; line 263 : #else 938 938 ; line 264 : // スタートコンディションとスレーブの呼び出し... 939 939 ; line 265 : IICMK10 = 1; 940 940 $DGL 0,24 941 941 00110 710AE6 set1 MK1L.0 ;[INF] 3, 2 942 942 ; line 266 : if( iic_mcu_call_slave( SLA ) != 0 ) 943 943 $DGL 0,25 944 944 00113 RFD1300 call !bs_F0084 ;[INF] 3, 3 945 945 00116 DD06 bz $?L0034 ;[INF] 2, 4 946 946 ; line 267 : { 947 947 00118 ??bb02_iic_mcu_write_a_byte: 948 948 ; line 268 : iic_mcu_busy = 0; 949 949 $DGL 0,27 950 950 00118 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 951 951 ; line 269 : return ( ERR_NAK ); 952 952 $DGL 0,28 953 953 0011B E7 onew bc ;[INF] 1, 1 954 954 0011C EF11 br $?L0029 ;[INF] 2, 3 955 955 0011E ??eb02_iic_mcu_write_a_byte: 956 956 ; line 270 : } 957 957 0011E ?L0034: 958 958 ; line 271 : iic_mcu_send_a_byte( adrs ); 959 959 $DGL 0,30 960 960 0011E 8C08 mov a,[hl+8] ; adrs ;[INF] 2, 1 961 961 00120 RFD0000 call !bs_F0085 ;[INF] 3, 3 962 962 ; line 272 : iic_mcu_send_a_byte( dat ); 963 963 $DGL 0,31 964 964 00123 8C0A mov a,[hl+10] ; dat ;[INF] 2, 1 965 965 00125 RFD0000 call !bs_F0085 ;[INF] 3, 3 966 966 ; line 273 : iic_mcu_send_sp( ); 967 967 $DGL 0,32 968 968 00128 RFD3902 call !_iic_mcu_send_sp ;[INF] 3, 3 969 969 ; line 274 : iic_mcu_busy = 0; 970 970 $DGL 0,33 971 971 0012B R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 972 972 ; line 275 : return ( ERR_SUCCESS ); 973 973 $DGL 0,34 974 974 0012E F7 clrw bc ;[INF] 1, 1 975 975 ; line 276 : #endif 976 976 ; line 277 : } 977 977 0012F ?L0029: 978 978 $DGL 0,36 979 979 0012F ??ef_iic_mcu_write_a_byte: 980 980 0012F C0 pop ax ;[INF] 1, 1 981 981 00130 C6 pop hl ;[INF] 1, 1 982 982 00131 D7 ret ;[INF] 1, 6 983 983 00132 ??ee_iic_mcu_write_a_byte: 984 984 ; line 278 : 985 985 ; line 279 : 986 986 ; line 280 : 987 987 ; line 281 : /* ======================================================== 988 988 ; line 282 : スレーブへライト 989 989 ; line 283 : レジスタ adrs を先頭に、 990 990 ; line 284 : *strから 991 991 ; line 285 : len文字書きます。 992 992 ; line 286 : 993 993 ; line 287 : 0 正常終了 994 994 ; line 288 : 1 スレーブが応答しない 995 995 ; line 289 : 2 バスが誰かに占有されていてタイムアウト 996 996 ; line 290 : 3 前に指示された通信がまだ終わってない 997 997 ; line 291 : 【注】 998 998 ; line 292 : スレーブがウェイトコンディションを出すことは禁止です。 999 999 ; line 293 : その場合でもエラー検出などできません 1000 1000 ; line 294 : DMA1を使用します。 1001 1001 ; line 295 : *************************************************************** 1002 1002 ; ***************/ 1003 1003 ; line 296 : err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src ) 1004 1004 ; line 297 : { 1005 1005 00132 _iic_mcu_write: 1006 1006 $DGL 1,116 1007 1007 00132 C7 push hl ;[INF] 1, 1 1008 1008 00133 C1 push ax ;[INF] 1, 1 1009 1009 00134 FBF8FF movw hl,sp ;[INF] 3, 1 1010 1010 00137 ??bf_iic_mcu_write: 1011 1011 ; line 298 : //* 1012 1012 ; line 299 : // 使用中なら待つ 1013 1013 ; line 300 : if( iic_mcu_initialized == 0 ) 1014 1014 $DGL 0,4 1015 1015 00137 R31220003 bt _iic_mcu_initialized,$?L0038 ;[INF] 4, 5 1016 1016 ; line 301 : { 1017 1017 0013B ??bb00_iic_mcu_write: 1018 1018 ; line 302 : #ifdef _debug_ 1019 1019 ; line 303 : iic_mcu_start( ); 1020 1020 $DGL 0,7 1021 1021 0013B RFD5902 call !_iic_mcu_start ;[INF] 3, 3 1022 1022 0013E ??eb00_iic_mcu_write: 1023 1023 ; line 304 : #else 1024 1024 ; line 305 : while( 1 ) 1025 1025 ; line 306 : { 1026 1026 ; line 307 : } 1027 1027 ; line 308 : #endif 1028 1028 ; line 309 : } 1029 1029 0013E ?L0038: 1030 1030 ; line 310 : while( iic_mcu_busy ) 1031 1031 $DGL 0,14 1032 1032 0013E R31140003 bf _iic_mcu_busy,$?L0041 ;[INF] 4, 5 1033 1033 ; line 311 : { 1034 1034 00142 ??bb01_iic_mcu_write: 1035 1035 ; line 312 : NOP( ); 1036 1036 $DGL 0,16 1037 1037 00142 00 nop ;[INF] 1, 1 1038 1038 00143 ??eb01_iic_mcu_write: 1039 1039 ; line 313 : } 1040 1040 $DGL 0,17 1041 1041 00143 EFF9 br $?L0038 ;[INF] 2, 3 1042 1042 00145 ?L0041: 1043 1043 ; line 314 : /*/ 1044 1044 ; line 315 : // 使用中なら帰る 1045 1045 ; line 316 : if( iic_mcu_initialized == 0 ){ 1046 1046 ; line 317 : return(0x80); 1047 1047 ; line 318 : } 1048 1048 ; line 319 : if( iic_mcu_busy != 0 ){ 1049 1049 ; line 320 : return( 3 ); 1050 1050 ; line 321 : } 1051 1051 ; line 322 : //*/ 1052 1052 ; line 323 : iic_mcu_busy = 1; 1053 1053 $DGL 0,27 1054 1054 00145 R711200 set1 _iic_mcu_busy ;[INF] 3, 2 1055 1055 ; line 324 : // スタートコンディションとスレーブの呼び出し... 1056 1056 ; line 325 : IICMK10 = 1; 1057 1057 $DGL 0,29 1058 1058 00148 710AE6 set1 MK1L.0 ;[INF] 3, 2 1059 1059 ; line 326 : IICIF10 = 0; 1060 1060 $DGL 0,30 1061 1061 0014B 710BE2 clr1 IF1L.0 ;[INF] 3, 2 1062 1062 ; line 327 : if( iic_mcu_call_slave( slave ) != 0 ) 1063 1063 $DGL 0,31 1064 1064 0014E RFD1300 call !bs_F0084 ;[INF] 3, 3 1065 1065 00151 DD09 bz $?L0042 ;[INF] 2, 4 1066 1066 ; line 328 : { 1067 1067 00153 ??bb02_iic_mcu_write: 1068 1068 ; line 329 : iic_mcu_busy = 0; 1069 1069 $DGL 0,33 1070 1070 00153 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 1071 1071 ; line 330 : EI( ); 1072 1072 $DGL 0,34 1073 1073 00156 717AFA ei ;[INF] 3, 4 1074 1074 ; line 331 : return ( ERR_NAK ); 1075 1075 $DGL 0,35 1076 1076 00159 E7 onew bc ;[INF] 1, 1 1077 1077 0015A EF52 br $?L0037 ;[INF] 2, 3 1078 1078 0015C ??eb02_iic_mcu_write: 1079 1079 ; line 332 : } 1080 1080 0015C ?L0042: 1081 1081 ; line 333 : 1082 1082 ; line 334 : IICIF10 = 0; 1083 1083 $DGL 0,38 1084 1084 0015C 710BE2 clr1 IF1L.0 ;[INF] 3, 2 1085 1085 ; line 335 : if( !iic_mcu_wo_dma ) 1086 1086 $DGL 0,39 1087 1087 0015F R31020039 bt _iic_mcu_wo_dma,$?L0044 ;[INF] 4, 5 1088 1088 ; line 336 : { 1089 1089 00163 ??bb03_iic_mcu_write: 1090 1090 ; line 337 : // DMAを使用する(通常) 1091 1091 ; line 338 : 1092 1092 ; line 339 : // レジスタアドレスを送り、データの準備 1093 1093 ; line 340 : memcpy( iic_send_work, src, 4 ); //バッファとして 1094 1094 ; 4バイトしか用意して無いため。 1095 1095 $DGL 0,44 1096 1096 00163 C7 push hl ;[INF] 1, 1 1097 1097 00164 R340000 movw de,#loww (_iic_send_work) ;[INF] 3, 1 1098 1098 00167 AC0C movw ax,[hl+12] ; src ;[INF] 2, 1 1099 1099 00169 16 movw hl,ax ;[INF] 1, 1 1100 1100 0016A 5204 mov c,#04H ; 4 ;[INF] 2, 1 1101 1101 0016C ?L0046: 1102 1102 0016C 8B mov a,[hl] ;[INF] 1, 1 1103 1103 0016D 99 mov [de],a ;[INF] 1, 1 1104 1104 0016E A5 incw de ;[INF] 1, 1 1105 1105 0016F A7 incw hl ;[INF] 1, 1 1106 1106 00170 92 dec c ;[INF] 1, 1 1107 1107 00171 DFF9 bnz $?L0046 ;[INF] 2, 4 1108 1108 00173 C6 pop hl ;[INF] 1, 1 1109 1109 ; line 341 : // DMAセット 1110 1110 ; line 342 : while( DST1 ) 1111 1111 $DGL 0,46 1112 1112 00174 ?L0048: 1113 1113 00174 3184BD02 bf DRC1.0,$?L0049 ;[INF] 4, 5 1114 1114 ; line 343 : {; 1115 1115 00178 ??bb04_iic_mcu_write: 1116 1116 00178 ??eb04_iic_mcu_write: 1117 1117 ; line 344 : } 1118 1118 $DGL 0,48 1119 1119 00178 EFFA br $?L0048 ;[INF] 2, 3 1120 1120 0017A ?L0049: 1121 1121 ; line 345 : 1122 1122 ; line 346 : DEN1 = 1; 1123 1123 $DGL 0,50 1124 1124 0017A 717ABD set1 DRC1.7 ;[INF] 3, 2 1125 1125 ; line 347 : DSA1 = ( u8 ) ( &SIO10 ); 1126 1126 $DGL 0,51 1127 1127 0017D CEB144 mov DSA1,#044H ; 68 ;[INF] 3, 1 1128 1128 ; line 348 : DRA1 = ( u16 ) iic_send_work; 1129 1129 $DGL 0,52 1130 1130 00180 RCBB40000 movw DRA1,#loww (_iic_send_work) ;[INF] 4, 1 1131 1131 ; line 349 : DBC1 = len; 1132 1132 $DGL 0,53 1133 1133 00184 8C0A mov a,[hl+10] ; len ;[INF] 2, 1 1134 1134 00186 318E shrw ax,8 ;[INF] 2, 1 1135 1135 00188 BEB8 movw DBC1,ax ;[INF] 2, 1 1136 1136 ; line 350 : DMC1 = DRS | 8; // RAM -> SFR, 8bit, IRQ, IIC10 1137 1137 $DGL 0,54 1138 1138 0018A CEBB48 mov DMC1,#048H ; 72 ;[INF] 3, 1 1139 1139 ; line 351 : 1140 1140 ; line 352 : DMAIF1 = 0; 1141 1141 $DGL 0,56 1142 1142 0018D 714BE1 clr1 IF0H.4 ;[INF] 3, 2 1143 1143 ; line 353 : DMAMK1 = 0; 1144 1144 $DGL 0,57 1145 1145 00190 714BE5 clr1 MK0H.4 ;[INF] 3, 2 1146 1146 ; line 354 : DST1 = 1; 1147 1147 $DGL 0,58 1148 1148 00193 710ABD set1 DRC1.0 ;[INF] 3, 2 1149 1149 ; line 355 : 1150 1150 ; line 356 : SIO10 = adrs; // 書きっぱなし! 割り込みが発生 1151 1151 ; してDMAスタート 1152 1152 $DGL 0,60 1153 1153 00196 8C08 mov a,[hl+8] ; adrs ;[INF] 2, 1 1154 1154 00198 9E44 mov SIO10,a ;[INF] 2, 1 1155 1155 0019A ??eb03_iic_mcu_write: 1156 1156 ; line 357 : // 残りは割り込みルーチン内で 1157 1157 ; line 358 : } 1158 1158 $DGL 0,62 1159 1159 0019A EF11 br $?L0045 ;[INF] 2, 3 1160 1160 0019C ?L0044: 1161 1161 ; line 359 : else 1162 1162 ; line 360 : { 1163 1163 0019C ??bb05_iic_mcu_write: 1164 1164 ; line 361 : // DMAを使用しない // 1165 1165 ; line 362 : 1166 1166 ; line 363 : // レジスタアドレスの送信 1167 1167 ; line 364 : SIO10 = adrs; 1168 1168 $DGL 0,68 1169 1169 0019C 8C08 mov a,[hl+8] ; adrs ;[INF] 2, 1 1170 1170 0019E 9E44 mov SIO10,a ;[INF] 2, 1 1171 1171 ; line 365 : 1172 1172 ; line 366 : IICMK10 = 0; 1173 1173 $DGL 0,70 1174 1174 001A0 710BE6 clr1 MK1L.0 ;[INF] 3, 2 1175 1175 ; line 367 : iic_send_wo_dma_len = len; 1176 1176 $DGL 0,71 1177 1177 001A3 8C0A mov a,[hl+10] ; len ;[INF] 2, 1 1178 1178 001A5 R9F0600 mov !_iic_send_wo_dma_len,a ;[INF] 3, 1 1179 1179 ; line 368 : p_iic_send_wo_dma_dat = src; 1180 1180 $DGL 0,72 1181 1181 001A8 AC0C movw ax,[hl+12] ; src ;[INF] 2, 1 1182 1182 001AA RBF0400 movw !_p_iic_send_wo_dma_dat,ax ;[INF] 3, 1 1183 1183 001AD ??eb05_iic_mcu_write: 1184 1184 ; line 369 : // 残りは割り込みルーチン内で 1185 1185 ; line 370 : } 1186 1186 001AD ?L0045: 1187 1187 ; line 371 : return ( ERR_SUCCESS ); 1188 1188 $DGL 0,75 1189 1189 001AD F7 clrw bc ;[INF] 1, 1 1190 1190 ; line 372 : } 1191 1191 001AE ?L0037: 1192 1192 $DGL 0,76 1193 1193 001AE ??ef_iic_mcu_write: 1194 1194 001AE C0 pop ax ;[INF] 1, 1 1195 1195 001AF C6 pop hl ;[INF] 1, 1 1196 1196 001B0 D7 ret ;[INF] 1, 6 1197 1197 001B1 ??ee_iic_mcu_write: 1198 1198 ; line 373 : 1199 1199 ; line 374 : 1200 1200 ; line 375 : 1201 1201 ; line 376 : 1202 1202 ; line 377 : /* ======================================================== 1203 1203 ; line 378 : DMA1転送終了割り込み 1204 1204 ; line 379 : IIC_mcu の送信完了コールバック関数のようなもの 1205 1205 ; line 380 : 注:DMA転送が終わっただけで、I2Cの転送は終わってません 1206 1206 ; line 381 :   割り込み中などで、DMA1の処理が遅延した場合、 1207 1207 ; line 382 : IIC10の割り込みの準備ができずに、割り込みを発生させられなくなる 1208 1208 ; line 383 : 恐れがあります。また、回避方法も特にありません。 1209 1209 ; line 384 :  そのため、DMA仕様の差異は、最後のバイトは送信完了を 1210 1210 ; line 385 : フラグのポーリングで確認します。 1211 1211 ; line 386 : ======================================================== */ 1212 1212 ; line 387 : __interrupt void int_dma1( ) 1213 1213 ; line 388 : { 1214 1214 1215 1215 ----- @@BASE CSEG BASE 1216 1216 00000 _int_dma1: 1217 1217 $DGL 1,151 1218 1218 00000 C1 push ax ;[INF] 1, 1 1219 1219 00001 C3 push bc ;[INF] 1, 1 1220 1220 00002 C5 push de ;[INF] 1, 1 1221 1221 00003 C7 push hl ;[INF] 1, 1 1222 1222 00004 520C mov c,#0CH ;[INF] 2, 1 1223 1223 00006 92 dec c ;[INF] 1, 1 1224 1224 00007 92 dec c ;[INF] 1, 1 1225 1225 00008 R690000 movw ax,_@SEGAX[c] ;[INF] 3, 1 1226 1226 0000B C1 push ax ;[INF] 1, 1 1227 1227 0000C DFF8 bnz $$-6 ;[INF] 2, 4 1228 1228 0000E 8EFD mov a,ES ;[INF] 2, 1 1229 1229 00010 70 mov x,a ;[INF] 1, 1 1230 1230 00011 8EFC mov a,CS ;[INF] 2, 1 1231 1231 00013 C1 push ax ;[INF] 1, 1 1232 1232 00014 ??bf_int_dma1: 1233 1233 ; line 389 : u16 i = 0; 1234 1234 $DGL 0,2 1235 1235 00014 F6 clrw ax ;[INF] 1, 1 1236 1236 00015 16 movw hl,ax ;[INF] 1, 1 1237 1237 ; line 390 : 1238 1238 ; line 391 : EI(); 1239 1239 $DGL 0,4 1240 1240 00016 717AFA ei ;[INF] 3, 4 1241 1241 ; line 392 : 1242 1242 ; line 393 : DMAMK1 = 1; 1243 1243 $DGL 0,6 1244 1244 00019 714AE5 set1 MK0H.4 ;[INF] 3, 2 1245 1245 ; line 394 : DEN1 = 0; 1246 1246 $DGL 0,7 1247 1247 0001C 717BBD clr1 DRC1.7 ;[INF] 3, 2 1248 1248 ; line 395 : while( ( SSR02L & TSF0 ) != 0 ) 1249 1249 $DGL 0,8 1250 1250 0001F ?L0052: 1251 1251 0001F 5140 mov a,#040H ; 64 ;[INF] 2, 1 1252 1252 00021 5F0401 and a,!SSR02L ;[INF] 3, 1 1253 1253 00024 D1 cmp0 a ;[INF] 1, 1 1254 1254 00025 DD05 bz $?L0053 ;[INF] 2, 4 1255 1255 ; line 396 : { 1256 1256 00027 ??bb00_int_dma1: 1257 1257 ; line 397 : if( ++i == 0 ) // タイムアウト? 1258 1258 $DGL 0,10 1259 1259 00027 A7 incw hl ;[INF] 1, 1 1260 1260 00028 F6 clrw ax ;[INF] 1, 1 1261 1261 00029 47 cmpw ax,hl ;[INF] 1, 1 1262 1262 0002A DFF3 bnz $?L0052 ;[INF] 2, 4 1263 1263 ; line 398 : { 1264 1264 0002C ??bb01_int_dma1: 1265 1265 ; line 399 : break; 1266 1266 0002C ??eb01_int_dma1: 1267 1267 ; line 400 : } 1268 1268 0002C ??eb00_int_dma1: 1269 1269 ; line 401 : } 1270 1270 0002C ?L0053: 1271 1271 ; line 402 : 1272 1272 ; line 403 : // iic_mcu_send_sp(); // ISR中で外の関数を呼ぶのは都合が悪いの 1273 1273 ; で展開 1274 1274 ; line 404 : { 1275 1275 0002C ??bb02_int_dma1: 1276 1276 ; line 405 : ST0 = 0x0004; 1277 1277 $DGL 0,18 1278 1278 0002C 300400 movw ax,#04H ; 4 ;[INF] 3, 1 1279 1279 0002F BF2401 movw !ST0,ax ;[INF] 3, 1 1280 1280 ; line 406 : SOE0 = 0; // 受信の時はもっと前に「も」設定 1281 1281 ; してる。(NACK出力) 1282 1282 $DGL 0,19 1283 1283 00032 F6 clrw ax ;[INF] 1, 1 1284 1284 00033 BF2A01 movw !SOE0,ax ;[INF] 3, 1 1285 1285 ; line 407 : SO0 = 0x0000 | TAUS_MASK; // SCL 1286 1286 $DGL 0,20 1287 1287 00036 300B0B movw ax,#0B0BH ; 2827 ;[INF] 3, 1 1288 1288 00039 BF2801 movw !SO0,ax ;[INF] 3, 1 1289 1289 ; line 408 : nop8(); 1290 1290 $DGL 0,21 1291 1291 0003C RFD1B00 call !_nop8 ;[INF] 3, 3 1292 1292 ; line 409 : /* 1293 1293 ; line 410 : NOP( ); 1294 1294 ; line 411 : NOP( ); 1295 1295 ; line 412 : NOP( ); 1296 1296 ; line 413 : NOP( ); 1297 1297 ; line 414 : #ifdef _OVERCLOCK_ 1298 1298 ; line 415 : NOP( ); 1299 1299 ; line 416 : NOP( ); 1300 1300 ; line 417 : NOP( ); 1301 1301 ; line 418 : NOP( ); 1302 1302 ; line 419 : NOP( ); 1303 1303 ; line 420 : #endif 1304 1304 ; line 421 : */ 1305 1305 ; line 422 : SO0 = 0x0400 | TAUS_MASK; // SCL 1306 1306 $DGL 0,35 1307 1307 0003F 300B0F movw ax,#0F0BH ; 3851 ;[INF] 3, 1 1308 1308 00042 BF2801 movw !SO0,ax ;[INF] 3, 1 1309 1309 ; line 423 : nop8(); 1310 1310 $DGL 0,36 1311 1311 00045 RFD1B00 call !_nop8 ;[INF] 3, 3 1312 1312 ; line 424 : /* 1313 1313 ; line 425 : NOP( ); 1314 1314 ; line 426 : NOP( ); 1315 1315 ; line 427 : NOP( ); 1316 1316 ; line 428 : NOP( ); 1317 1317 ; line 429 : #ifdef _OVERCLOCK_ 1318 1318 ; line 430 : NOP( ); 1319 1319 ; line 431 : NOP( ); 1320 1320 ; line 432 : NOP( ); 1321 1321 ; line 433 : NOP( ); 1322 1322 ; line 434 : NOP( ); 1323 1323 ; line 435 : #endif 1324 1324 ; line 436 : */ 1325 1325 ; line 437 : SO0 = 0x0404 | TAUS_MASK; 1326 1326 $DGL 0,50 1327 1327 00048 300F0F movw ax,#0F0FH ; 3855 ;[INF] 3, 1 1328 1328 0004B BF2801 movw !SO0,ax ;[INF] 3, 1 1329 1329 0004E ??eb02_int_dma1: 1330 1330 ; line 438 : } 1331 1331 ; line 439 : IICMK10 = 1; 1332 1332 $DGL 0,52 1333 1333 0004E 710AE6 set1 MK1L.0 ;[INF] 3, 2 1334 1334 ; line 440 : iic_mcu_busy = 0; 1335 1335 $DGL 0,53 1336 1336 00051 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 1337 1337 ; line 441 : } 1338 1338 $DGL 0,54 1339 1339 00054 ??ef_int_dma1: 1340 1340 00054 C0 pop ax ;[INF] 1, 1 1341 1341 00055 9EFC mov CS,a ;[INF] 2, 1 1342 1342 00057 60 mov a,x ;[INF] 1, 1 1343 1343 00058 9EFD mov ES,a ;[INF] 2, 1 1344 1344 0005A R340000 movw de,#_@SEGAX ;[INF] 3, 1 1345 1345 0005D 5206 mov c,#06H ;[INF] 2, 1 1346 1346 0005F C0 pop ax ;[INF] 1, 1 1347 1347 00060 B9 movw [de],ax ;[INF] 1, 1 1348 1348 00061 A5 incw de ;[INF] 1, 1 1349 1349 00062 A5 incw de ;[INF] 1, 1 1350 1350 00063 92 dec c ;[INF] 1, 1 1351 1351 00064 DFF9 bnz $$-5 ;[INF] 2, 4 1352 1352 00066 C6 pop hl ;[INF] 1, 1 1353 1353 00067 C4 pop de ;[INF] 1, 1 1354 1354 00068 C2 pop bc ;[INF] 1, 1 1355 1355 00069 C0 pop ax ;[INF] 1, 1 1356 1356 0006A 61FC reti ;[INF] 2, 6 1357 1357 0006C ??ee_int_dma1: 1358 1358 ; line 442 : 1359 1359 ; line 443 : 1360 1360 ; line 444 : 1361 1361 ; line 445 : /* ======================================================== 1362 1362 ; line 446 : IIC MCUのバイト送出完了割り込み 1363 1363 ; line 447 : ※DMA使用時は使用されません。 1364 1364 ; line 448 :  他の割り込み処理中でDMAの割り込みにすぐ飛ばない場合、 1365 1365 ; line 449 :  IIC割り込みのセットが間に合わず困ることがあります。 1366 1366 ; line 450 : ======================================================== */ 1367 1367 ; line 451 : __interrupt void int_iic10( ) 1368 1368 ; line 452 : { 1369 1369 0006C _int_iic10: 1370 1370 $DGL 1,170 1371 1371 0006C C1 push ax ;[INF] 1, 1 1372 1372 0006D C3 push bc ;[INF] 1, 1 1373 1373 0006E C5 push de ;[INF] 1, 1 1374 1374 0006F C7 push hl ;[INF] 1, 1 1375 1375 00070 520C mov c,#0CH ;[INF] 2, 1 1376 1376 00072 92 dec c ;[INF] 1, 1 1377 1377 00073 92 dec c ;[INF] 1, 1 1378 1378 00074 R690000 movw ax,_@SEGAX[c] ;[INF] 3, 1 1379 1379 00077 C1 push ax ;[INF] 1, 1 1380 1380 00078 DFF8 bnz $$-6 ;[INF] 2, 4 1381 1381 0007A 8EFD mov a,ES ;[INF] 2, 1 1382 1382 0007C 70 mov x,a ;[INF] 1, 1 1383 1383 0007D 8EFC mov a,CS ;[INF] 2, 1 1384 1384 0007F C1 push ax ;[INF] 1, 1 1385 1385 00080 ??bf_int_iic10: 1386 1386 ; line 453 : EI(); 1387 1387 $DGL 0,2 1388 1388 00080 717AFA ei ;[INF] 3, 4 1389 1389 ; line 454 : if( iic_send_wo_dma_len != 0 ) 1390 1390 $DGL 0,3 1391 1391 00083 RD50600 cmp0 !_iic_send_wo_dma_len ;[INF] 3, 1 1392 1392 00086 DD0E bz $?L0058 ;[INF] 2, 4 1393 1393 ; line 455 : { 1394 1394 00088 ??bb00_int_iic10: 1395 1395 ; line 456 : SIO10 = *p_iic_send_wo_dma_dat; 1396 1396 $DGL 0,5 1397 1397 00088 REB0400 movw de,!_p_iic_send_wo_dma_dat ;[INF] 3, 1 1398 1398 0008B 89 mov a,[de] ;[INF] 1, 1 1399 1399 0008C 9E44 mov SIO10,a ;[INF] 2, 1 1400 1400 ; line 457 : p_iic_send_wo_dma_dat++; 1401 1401 $DGL 0,6 1402 1402 0008E RA20400 incw !_p_iic_send_wo_dma_dat ;[INF] 3, 2 1403 1403 ; line 458 : iic_send_wo_dma_len--; 1404 1404 $DGL 0,7 1405 1405 00091 RB00600 dec !_iic_send_wo_dma_len ;[INF] 3, 2 1406 1406 ; line 459 : return; 1407 1407 $DGL 0,8 1408 1408 00094 EF2B br $?L0057 ;[INF] 2, 3 1409 1409 00096 ??eb00_int_iic10: 1410 1410 ; line 460 : } 1411 1411 00096 ?L0058: 1412 1412 ; line 461 : 1413 1413 ; line 462 : // 最後のバイト送信完了 1414 1414 ; line 463 : IICMK10 = 1; 1415 1415 $DGL 0,12 1416 1416 00096 710AE6 set1 MK1L.0 ;[INF] 3, 2 1417 1417 ; line 464 : // iic_mcu_send_sp(); // ISR中で外の関数を呼ぶのは都合が悪い 1418 1418 ; ので展開 1419 1419 ; line 465 : { 1420 1420 00099 ??bb01_int_iic10: 1421 1421 ; line 466 : ST0 = 0x0004; 1422 1422 $DGL 0,15 1423 1423 00099 300400 movw ax,#04H ; 4 ;[INF] 3, 1 1424 1424 0009C BF2401 movw !ST0,ax ;[INF] 3, 1 1425 1425 ; line 467 : SOE0 = 0; // 受信の時はもっと前に「も」設定 1426 1426 ; してる。(NACK出力) 1427 1427 $DGL 0,16 1428 1428 0009F F6 clrw ax ;[INF] 1, 1 1429 1429 000A0 BF2A01 movw !SOE0,ax ;[INF] 3, 1 1430 1430 ; line 468 : SO0 = 0x0000 | TAUS_MASK; // SCL 1431 1431 $DGL 0,17 1432 1432 000A3 300B0B movw ax,#0B0BH ; 2827 ;[INF] 3, 1 1433 1433 000A6 BF2801 movw !SO0,ax ;[INF] 3, 1 1434 1434 ; line 469 : nop8(); 1435 1435 $DGL 0,18 1436 1436 000A9 RFD1B00 call !_nop8 ;[INF] 3, 3 1437 1437 ; line 470 : /* 1438 1438 ; line 471 : NOP( ); 1439 1439 ; line 472 : NOP( ); 1440 1440 ; line 473 : NOP( ); 1441 1441 ; line 474 : NOP( ); 1442 1442 ; line 475 : #ifdef _OVERCLOCK_ 1443 1443 ; line 476 : NOP( ); 1444 1444 ; line 477 : NOP( ); 1445 1445 ; line 478 : NOP( ); 1446 1446 ; line 479 : NOP( ); 1447 1447 ; line 480 : NOP( ); 1448 1448 ; line 481 : #endif 1449 1449 ; line 482 : */ 1450 1450 ; line 483 : SO0 = 0x0400 | TAUS_MASK; // SCL 1451 1451 $DGL 0,32 1452 1452 000AC 300B0F movw ax,#0F0BH ; 3851 ;[INF] 3, 1 1453 1453 000AF BF2801 movw !SO0,ax ;[INF] 3, 1 1454 1454 ; line 484 : nop8(); 1455 1455 $DGL 0,33 1456 1456 000B2 RFD1B00 call !_nop8 ;[INF] 3, 3 1457 1457 ; line 485 : /* 1458 1458 ; line 486 : NOP( ); 1459 1459 ; line 487 : NOP( ); 1460 1460 ; line 488 : NOP( ); 1461 1461 ; line 489 : NOP( ); 1462 1462 ; line 490 : #ifdef _OVERCLOCK_ 1463 1463 ; line 491 : NOP( ); 1464 1464 ; line 492 : NOP( ); 1465 1465 ; line 493 : NOP( ); 1466 1466 ; line 494 : NOP( ); 1467 1467 ; line 495 : NOP( ); 1468 1468 ; line 496 : #endif 1469 1469 ; line 497 : */ 1470 1470 ; line 498 : SO0 = 0x0404 | TAUS_MASK; 1471 1471 $DGL 0,47 1472 1472 000B5 300F0F movw ax,#0F0FH ; 3855 ;[INF] 3, 1 1473 1473 000B8 BF2801 movw !SO0,ax ;[INF] 3, 1 1474 1474 000BB ??eb01_int_iic10: 1475 1475 ; line 499 : } 1476 1476 ; line 500 : iic_mcu_wo_dma = 0; 1477 1477 $DGL 0,49 1478 1478 000BB R710300 clr1 _iic_mcu_wo_dma ;[INF] 3, 2 1479 1479 ; line 501 : iic_mcu_busy = 0; 1480 1480 $DGL 0,50 1481 1481 000BE R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 1482 1482 ; line 502 : } 1483 1483 000C1 ?L0057: 1484 1484 $DGL 0,51 1485 1485 000C1 ??ef_int_iic10: 1486 1486 000C1 C0 pop ax ;[INF] 1, 1 1487 1487 000C2 9EFC mov CS,a ;[INF] 2, 1 1488 1488 000C4 60 mov a,x ;[INF] 1, 1 1489 1489 000C5 9EFD mov ES,a ;[INF] 2, 1 1490 1490 000C7 R340000 movw de,#_@SEGAX ;[INF] 3, 1 1491 1491 000CA 5206 mov c,#06H ;[INF] 2, 1 1492 1492 000CC C0 pop ax ;[INF] 1, 1 1493 1493 000CD B9 movw [de],ax ;[INF] 1, 1 1494 1494 000CE A5 incw de ;[INF] 1, 1 1495 1495 000CF A5 incw de ;[INF] 1, 1 1496 1496 000D0 92 dec c ;[INF] 1, 1 1497 1497 000D1 DFF9 bnz $$-5 ;[INF] 2, 4 1498 1498 000D3 C6 pop hl ;[INF] 1, 1 1499 1499 000D4 C4 pop de ;[INF] 1, 1 1500 1500 000D5 C2 pop bc ;[INF] 1, 1 1501 1501 000D6 C0 pop ax ;[INF] 1, 1 1502 1502 000D7 61FC reti ;[INF] 2, 6 1503 1503 000D9 ??ee_int_iic10: 1504 1504 ; line 503 : 1505 1505 ; line 504 : 1506 1506 ; line 505 : 1507 1507 ; line 506 : /* ======================================================== 1508 1508 ; line 507 : スレーブの呼び出し 1509 1509 ; line 508 :  スレーブアドレスを呼んで、ACKの確認。 1510 1510 ; line 509 : ACK →                 返:0 1511 1511 ; line 510 :  NACK → ストップコンディションを出す。 返:1 1512 1512 ; line 511 : ======================================================== */ 1513 1513 ; line 512 : static err iic_mcu_call_slave( u8 slave ) 1514 1514 ; line 513 : { 1515 1515 1516 1516 ----- ROM_CODE CSEG BASE 1517 1517 001B1 _iic_mcu_call_slave: 1518 1518 $DGL 1,184 1519 1519 001B1 C7 push hl ;[INF] 1, 1 1520 1520 001B2 16 movw hl,ax ;[INF] 1, 1 1521 1521 001B3 ??bf_iic_mcu_call_slave: 1522 1522 ; line 514 : iic_mcu_send_st( ); 1523 1523 $DGL 0,2 1524 1524 001B3 RFDEB01 call !_iic_mcu_send_st ;[INF] 3, 3 1525 1525 ; line 515 : 1526 1526 ; line 516 : // SIR02 = SSR02; // NAKエラーのフラグクリア 1527 1527 ; line 517 : if( iic_mcu_send_a_byte( slave ) != ERR_SUCCESS ) 1528 1528 $DGL 0,5 1529 1529 001B6 17 movw ax,hl ;[INF] 1, 1 1530 1530 001B7 F1 clrb a ;[INF] 1, 1 1531 1531 001B8 RFDC701 call !_iic_mcu_send_a_byte ;[INF] 3, 3 1532 1532 001BB D2 cmp0 c ;[INF] 1, 1 1533 1533 001BC DD06 bz $?L0062 ;[INF] 2, 4 1534 1534 ; line 518 : { 1535 1535 001BE ??bb00_iic_mcu_call_slave: 1536 1536 ; line 519 : iic_mcu_send_sp( ); 1537 1537 $DGL 0,7 1538 1538 001BE RFD3902 call !_iic_mcu_send_sp ;[INF] 3, 3 1539 1539 ; line 520 : return ( ERR_NAK ); // 指定のスレーブがいない / busy 1540 1540 $DGL 0,8 1541 1541 001C1 E7 onew bc ;[INF] 1, 1 1542 1542 001C2 EF01 br $?L0061 ;[INF] 2, 3 1543 1543 001C4 ??eb00_iic_mcu_call_slave: 1544 1544 ; line 521 : } 1545 1545 001C4 ?L0062: 1546 1546 ; line 522 : 1547 1547 ; line 523 : return ( ERR_SUCCESS ); 1548 1548 $DGL 0,11 1549 1549 001C4 F7 clrw bc ;[INF] 1, 1 1550 1550 ; line 524 : } 1551 1551 001C5 ?L0061: 1552 1552 $DGL 0,12 1553 1553 001C5 ??ef_iic_mcu_call_slave: 1554 1554 001C5 C6 pop hl ;[INF] 1, 1 1555 1555 001C6 D7 ret ;[INF] 1, 6 1556 1556 001C7 ??ee_iic_mcu_call_slave: 1557 1557 ; line 525 : 1558 1558 ; line 526 : 1559 1559 ; line 527 : 1560 1560 ; line 528 : /* ======================================================== 1561 1561 ; line 529 : ほんとに1バイト書くのみ 1562 1562 ; line 530 : 書き終わるまで帰りません 1563 1563 ; line 531 : ======================================================== */ 1564 1564 ; line 532 : static err iic_mcu_send_a_byte( u8 dat ) 1565 1565 ; line 533 : { 1566 1566 001C7 _iic_mcu_send_a_byte: 1567 1567 $DGL 1,195 1568 1568 001C7 C7 push hl ;[INF] 1, 1 1569 1569 001C8 16 movw hl,ax ;[INF] 1, 1 1570 1570 001C9 ??bf_iic_mcu_send_a_byte: 1571 1571 ; line 534 : IICMK10 = 1; 1572 1572 $DGL 0,2 1573 1573 001C9 710AE6 set1 MK1L.0 ;[INF] 3, 2 1574 1574 ; line 535 : IICIF10 = 0; 1575 1575 $DGL 0,3 1576 1576 001CC 710BE2 clr1 IF1L.0 ;[INF] 3, 2 1577 1577 ; line 536 : SIO10 = dat; 1578 1578 $DGL 0,4 1579 1579 001CF 66 mov a,l ;[INF] 1, 1 1580 1580 001D0 9E44 mov SIO10,a ;[INF] 2, 1 1581 1581 ; line 537 : while( IICIF10 == 0 ) 1582 1582 $DGL 0,5 1583 1583 001D2 ?L0066: 1584 1584 001D2 3182E203 bt IF1L.0,$?L0067 ;[INF] 4, 5 1585 1585 ; line 538 : { 1586 1586 001D6 ??bb00_iic_mcu_send_a_byte: 1587 1587 ; line 539 : NOP( ); 1588 1588 $DGL 0,7 1589 1589 001D6 00 nop ;[INF] 1, 1 1590 1590 001D7 ??eb00_iic_mcu_send_a_byte: 1591 1591 ; line 540 : } // 通信中 1592 1592 $DGL 0,8 1593 1593 001D7 EFF9 br $?L0066 ;[INF] 2, 3 1594 1594 001D9 ?L0067: 1595 1595 ; line 541 : if( SSR02 != 0 ) 1596 1596 $DGL 0,9 1597 1597 001D9 F6 clrw ax ;[INF] 1, 1 1598 1598 001DA 420401 cmpw ax,!SSR02 ;[INF] 3, 1 1599 1599 001DD DD09 bz $?L0068 ;[INF] 2, 4 1600 1600 ; line 542 : { 1601 1601 001DF ??bb01_iic_mcu_send_a_byte: 1602 1602 ; line 543 : SIR02 = SSR02; 1603 1603 $DGL 0,11 1604 1604 001DF AF0401 movw ax,!SSR02 ;[INF] 3, 1 1605 1605 001E2 BF0C01 movw !SIR02,ax ;[INF] 3, 1 1606 1606 ; line 544 : return ( ERR_NAK ); 1607 1607 $DGL 0,12 1608 1608 001E5 E7 onew bc ;[INF] 1, 1 1609 1609 001E6 EF01 br $?L0065 ;[INF] 2, 3 1610 1610 001E8 ??eb01_iic_mcu_send_a_byte: 1611 1611 ; line 545 : } 1612 1612 001E8 ?L0068: 1613 1613 ; line 546 : return ( ERR_SUCCESS ); 1614 1614 $DGL 0,14 1615 1615 001E8 F7 clrw bc ;[INF] 1, 1 1616 1616 ; line 547 : } 1617 1617 001E9 ?L0065: 1618 1618 $DGL 0,15 1619 1619 001E9 ??ef_iic_mcu_send_a_byte: 1620 1620 001E9 C6 pop hl ;[INF] 1, 1 1621 1621 001EA D7 ret ;[INF] 1, 6 1622 1622 001EB ??ee_iic_mcu_send_a_byte: 1623 1623 ; line 548 : 1624 1624 ; line 549 : 1625 1625 ; line 550 : 1626 1626 ; line 551 : /* ======================================================== 1627 1627 ; line 552 : スタートコンディションを発行 1628 1628 ; line 553 : ソフトウェア制御 1629 1629 ; line 554 : ======================================================== */ 1630 1630 ; line 555 : static void iic_mcu_send_st( ) 1631 1631 ; line 556 : { 1632 1632 001EB _iic_mcu_send_st: 1633 1633 $DGL 1,210 1634 1634 001EB ??bf_iic_mcu_send_st: 1635 1635 ; line 557 : SO0 &= ~0x0004; // SDA 1636 1636 $DGL 0,2 1637 1637 001EB AF2801 movw ax,!SO0 ;[INF] 3, 1 1638 1638 001EE 08 xch a,x ;[INF] 1, 1 1639 1639 001EF 5CFB and a,#0FBH ; 251 ;[INF] 2, 1 1640 1640 001F1 08 xch a,x ;[INF] 1, 1 1641 1641 001F2 BF2801 movw !SO0,ax ;[INF] 3, 1 1642 1642 ; line 558 : nop8(); 1643 1643 $DGL 0,3 1644 1644 001F5 RFD1B00 call !_nop8 ;[INF] 3, 3 1645 1645 ; line 559 : /* 1646 1646 ; line 560 : NOP( ); 1647 1647 ; line 561 : NOP( ); 1648 1648 ; line 562 : NOP( ); 1649 1649 ; line 563 : NOP( ); 1650 1650 ; line 564 : #ifdef _OVERCLOCK_ 1651 1651 ; line 565 : NOP( ); 1652 1652 ; line 566 : NOP( ); 1653 1653 ; line 567 : NOP( ); 1654 1654 ; line 568 : NOP( ); 1655 1655 ; line 569 : NOP( ); 1656 1656 ; line 570 : #endif 1657 1657 ; line 571 : */ 1658 1658 ; line 572 : SO0 &= ~0x0400; // SCL 1659 1659 $DGL 0,17 1660 1660 001F8 AF2801 movw ax,!SO0 ;[INF] 3, 1 1661 1661 001FB 5CFB and a,#0FBH ; 251 ;[INF] 2, 1 1662 1662 001FD BF2801 movw !SO0,ax ;[INF] 3, 1 1663 1663 ; line 573 : SOE0 = 0x0004; // ハード制御へ 1664 1664 $DGL 0,18 1665 1665 00200 300400 movw ax,#04H ; 4 ;[INF] 3, 1 1666 1666 00203 BF2A01 movw !SOE0,ax ;[INF] 3, 1 1667 1667 ; line 574 : 1668 1668 ; line 575 : SCR02 = TXE0 | 1 << SLC02 | 7 << DLS02; // 送信許可、デー 1669 1669 ; タは8ビット単位 1670 1670 $DGL 0,20 1671 1671 00206 301780 movw ax,#08017H ; -32745 ;[INF] 3, 1 1672 1672 00209 BF1C01 movw !SCR02,ax ;[INF] 3, 1 1673 1673 ; line 576 : SS0 = 0x0004; // 通信待機 1674 1674 $DGL 0,21 1675 1675 0020C RFD0C00 call !bs_S0087 ;[INF] 3, 3 1676 1676 ; line 577 : } 1677 1677 $DGL 0,22 1678 1678 0020F ??ef_iic_mcu_send_st: 1679 1679 0020F D7 ret ;[INF] 1, 6 1680 1680 00210 ??ee_iic_mcu_send_st: 1681 1681 ; line 578 : 1682 1682 ; line 579 : 1683 1683 ; line 580 : 1684 1684 ; line 581 : /* ======================================================== 1685 1685 ; line 582 : リスタート発行 1686 1686 ; line 583 : ======================================================== */ 1687 1687 ; line 584 : static void iic_mcu_send_re_st( ) 1688 1688 ; line 585 : { 1689 1689 00210 _iic_mcu_send_re_st: 1690 1690 $DGL 1,216 1691 1691 00210 ??bf_iic_mcu_send_re_st: 1692 1692 ; line 586 : ST0 |= 0x0004; 1693 1693 $DGL 0,2 1694 1694 00210 AF2401 movw ax,!ST0 ;[INF] 3, 1 1695 1695 00213 08 xch a,x ;[INF] 1, 1 1696 1696 00214 6C04 or a,#04H ; 4 ;[INF] 2, 1 1697 1697 00216 08 xch a,x ;[INF] 1, 1 1698 1698 00217 BF2401 movw !ST0,ax ;[INF] 3, 1 1699 1699 ; line 587 : SO0 |= 0x0400 | TAUS_MASK; // ( SDA = H ), SCL -> H 1700 1700 $DGL 0,3 1701 1701 0021A AF2801 movw ax,!SO0 ;[INF] 3, 1 1702 1702 0021D 6C0F or a,#0FH ; 15 ;[INF] 2, 1 1703 1703 0021F 08 xch a,x ;[INF] 1, 1 1704 1704 00220 6C0B or a,#0BH ; 11 ;[INF] 2, 1 1705 1705 00222 08 xch a,x ;[INF] 1, 1 1706 1706 00223 BF2801 movw !SO0,ax ;[INF] 3, 1 1707 1707 ; line 588 : nop8(); 1708 1708 $DGL 0,4 1709 1709 00226 RFD1B00 call !_nop8 ;[INF] 3, 3 1710 1710 ; line 589 : /* 1711 1711 ; line 590 : NOP( ); 1712 1712 ; line 591 : NOP( ); 1713 1713 ; line 592 : NOP( ); 1714 1714 ; line 593 : NOP( ); 1715 1715 ; line 594 : #ifdef _OVERCLOCK_ 1716 1716 ; line 595 : NOP( ); 1717 1717 ; line 596 : NOP( ); 1718 1718 ; line 597 : NOP( ); 1719 1719 ; line 598 : NOP( ); 1720 1720 ; line 599 : NOP( ); 1721 1721 ; line 600 : #endif 1722 1722 ; line 601 : */ 1723 1723 ; line 602 : SOE0 &= ~0x0004; // ( SCL = H ), SDA -> L 1724 1724 $DGL 0,18 1725 1725 00229 AF2A01 movw ax,!SOE0 ;[INF] 3, 1 1726 1726 0022C 08 xch a,x ;[INF] 1, 1 1727 1727 0022D 5CFB and a,#0FBH ; 251 ;[INF] 2, 1 1728 1728 0022F 08 xch a,x ;[INF] 1, 1 1729 1729 00230 BF2A01 movw !SOE0,ax ;[INF] 3, 1 1730 1730 ; line 603 : nop8(); 1731 1731 $DGL 0,19 1732 1732 00233 RFD1B00 call !_nop8 ;[INF] 3, 3 1733 1733 ; line 604 : /* 1734 1734 ; line 605 : NOP( ); 1735 1735 ; line 606 : NOP( ); 1736 1736 ; line 607 : NOP( ); 1737 1737 ; line 608 : NOP( ); 1738 1738 ; line 609 : #ifdef _OVERCLOCK_ 1739 1739 ; line 610 : NOP( ); 1740 1740 ; line 611 : NOP( ); 1741 1741 ; line 612 : NOP( ); 1742 1742 ; line 613 : NOP( ); 1743 1743 ; line 614 : NOP( ); 1744 1744 ; line 615 : #endif 1745 1745 ; line 616 : */ 1746 1746 ; line 617 : iic_mcu_send_st( ); 1747 1747 $DGL 0,33 1748 1748 00236 REDEB01 br !_iic_mcu_send_st ;[INF] 3, 3 1749 1749 00239 ??ef_iic_mcu_send_re_st: 1750 1750 00239 ??ee_iic_mcu_send_re_st: 1751 1751 ; line 618 : } 1752 1752 ; line 619 : 1753 1753 ; line 620 : 1754 1754 ; line 621 : 1755 1755 ; line 622 : /* ======================================================== 1756 1756 ; line 623 : ストップコンディション発行 1757 1757 ; line 624 : この前に、「最後のバイトの送受信」の時に前準備が必要です。 1758 1758 ; line 625 : ======================================================== */ 1759 1759 ; line 626 : static void iic_mcu_send_sp( ) 1760 1760 ; line 627 : { 1761 1761 00239 _iic_mcu_send_sp: 1762 1762 $DGL 1,222 1763 1763 00239 ??bf_iic_mcu_send_sp: 1764 1764 ; line 628 : ST0 = 0x0004; 1765 1765 $DGL 0,2 1766 1766 00239 RFD0500 call !bs_S0086 ;[INF] 3, 3 1767 1767 ; line 629 : SOE0 = 0; // 受信の時はもっと前に「も」設定 1768 1768 ; してる。(NACK出力) 1769 1769 $DGL 0,3 1770 1770 0023C F6 clrw ax ;[INF] 1, 1 1771 1771 0023D BF2A01 movw !SOE0,ax ;[INF] 3, 1 1772 1772 ; line 630 : SO0 = 0x0000 | TAUS_MASK; // SCL 1773 1773 $DGL 0,4 1774 1774 00240 300B0B movw ax,#0B0BH ; 2827 ;[INF] 3, 1 1775 1775 00243 BF2801 movw !SO0,ax ;[INF] 3, 1 1776 1776 ; line 631 : nop8(); 1777 1777 $DGL 0,5 1778 1778 00246 RFD1B00 call !_nop8 ;[INF] 3, 3 1779 1779 ; line 632 : /* 1780 1780 ; line 633 : NOP( ); 1781 1781 ; line 634 : NOP( ); 1782 1782 ; line 635 : NOP( ); 1783 1783 ; line 636 : NOP( ); 1784 1784 ; line 637 : #ifdef _OVERCLOCK_ 1785 1785 ; line 638 : NOP( ); 1786 1786 ; line 639 : NOP( ); 1787 1787 ; line 640 : NOP( ); 1788 1788 ; line 641 : NOP( ); 1789 1789 ; line 642 : NOP( ); 1790 1790 ; line 643 : #endif 1791 1791 ; line 644 : */ 1792 1792 ; line 645 : SO0 = 0x0400 | TAUS_MASK; // SCL 1793 1793 $DGL 0,19 1794 1794 00249 300B0F movw ax,#0F0BH ; 3851 ;[INF] 3, 1 1795 1795 0024C BF2801 movw !SO0,ax ;[INF] 3, 1 1796 1796 ; line 646 : nop8(); 1797 1797 $DGL 0,20 1798 1798 0024F RFD1B00 call !_nop8 ;[INF] 3, 3 1799 1799 ; line 647 : /* 1800 1800 ; line 648 : NOP( ); 1801 1801 ; line 649 : NOP( ); 1802 1802 ; line 650 : NOP( ); 1803 1803 ; line 651 : NOP( ); 1804 1804 ; line 652 : #ifdef _OVERCLOCK_ 1805 1805 ; line 653 : NOP( ); 1806 1806 ; line 654 : NOP( ); 1807 1807 ; line 655 : NOP( ); 1808 1808 ; line 656 : NOP( ); 1809 1809 ; line 657 : NOP( ); 1810 1810 ; line 658 : #endif 1811 1811 ; line 659 : */ 1812 1812 ; line 660 : SO0 = 0x0404 | TAUS_MASK; 1813 1813 $DGL 0,34 1814 1814 00252 300F0F movw ax,#0F0FH ; 3855 ;[INF] 3, 1 1815 1815 00255 BF2801 movw !SO0,ax ;[INF] 3, 1 1816 1816 ; line 661 : } 1817 1817 $DGL 0,35 1818 1818 00258 ??ef_iic_mcu_send_sp: 1819 1819 00258 D7 ret ;[INF] 1, 6 1820 1820 00259 ??ee_iic_mcu_send_sp: 1821 1821 ; line 662 : 1822 1822 ; line 663 : 1823 1823 ; line 664 : 1824 1824 ; line 665 : 1825 1825 ; line 666 : /* ======================================================== 1826 1826 ; line 667 : ペリフェラルモジュールの初期化 1827 1827 ; line 668 : ======================================================== */ 1828 1828 ; line 669 : void iic_mcu_start( ) 1829 1829 ; line 670 : { 1830 1830 00259 _iic_mcu_start: 1831 1831 $DGL 1,228 1832 1832 00259 ??bf_iic_mcu_start: 1833 1833 ; line 671 : DST1 = 0; 1834 1834 $DGL 0,2 1835 1835 00259 710BBD clr1 DRC1.0 ;[INF] 3, 2 1836 1836 ; line 672 : NOP( ); // 2clkもしくは、DSTn==0をポーリ 1837 1837 ; ング 1838 1838 $DGL 0,3 1839 1839 0025C 00 nop ;[INF] 1, 1 1840 1840 ; line 673 : NOP( ); 1841 1841 $DGL 0,4 1842 1842 0025D 00 nop ;[INF] 1, 1 1843 1843 ; line 674 : DEN1 = 0; 1844 1844 $DGL 0,5 1845 1845 0025E 717BBD clr1 DRC1.7 ;[INF] 3, 2 1846 1846 ; line 675 : I2C_PU_on(); 1847 1847 $DGL 0,6 1848 1848 00261 ??bb00_iic_mcu_start: 1849 1849 00261 713A25 set1 PM5.3 ;[INF] 3, 2 1850 1850 00264 713A23 set1 PM3.3 ;[INF] 3, 2 1851 1851 00267 6A0E03 or P14,#03H ; 3 ;[INF] 3, 2 1852 1852 0026A 713205 set1 P5.3 ;[INF] 3, 2 1853 1853 0026D 713B25 clr1 PM5.3 ;[INF] 3, 2 1854 1854 00270 713203 set1 P3.3 ;[INF] 3, 2 1855 1855 00273 713B23 clr1 PM3.3 ;[INF] 3, 2 1856 1856 00276 ??eb00_iic_mcu_start: 1857 1857 ; line 676 : SAU0EN = 1; 1858 1858 $DGL 0,7 1859 1859 00276 7120F000 set1 !PER0.2 ;[INF] 4, 2 1860 1860 ; line 677 : nop8(); 1861 1861 $DGL 0,8 1862 1862 0027A RFD1B00 call !_nop8 ;[INF] 3, 3 1863 1863 ; line 678 : /* 1864 1864 ; line 679 : NOP( ); 1865 1865 ; line 680 : NOP( ); 1866 1866 ; line 681 : NOP( ); 1867 1867 ; line 682 : NOP( ); 1868 1868 ; line 683 : #ifdef _OVERCLOCK_ 1869 1869 ; line 684 : NOP( ); 1870 1870 ; line 685 : NOP( ); 1871 1871 ; line 686 : NOP( ); 1872 1872 ; line 687 : NOP( ); 1873 1873 ; line 688 : NOP( ); 1874 1874 ; line 689 : #endif 1875 1875 ; line 690 : */ 1876 1876 ; line 691 : SPS0 = 0x0000; // シリアルユニットのクロック0。 1877 1877 ; (8M/2)/1 1878 1878 $DGL 0,22 1879 1879 0027D F6 clrw ax ;[INF] 1, 1 1880 1880 0027E BF2601 movw !SPS0,ax ;[INF] 3, 1 1881 1881 ; line 692 : SMR02 = bSMR0n_FIXEDBIT | bMD0n2; // 簡易I2Cに設定 1882 1882 $DGL 0,23 1883 1883 00281 5024 mov x,#024H ; 36 ;[INF] 2, 1 1884 1884 00283 BF1401 movw !SMR02,ax ;[INF] 3, 1 1885 1885 ; line 693 : #ifdef _OVERCLOCK_ 1886 1886 ; line 694 : SDR02 = 12 << 9; // ボーレート設定 (8M/2)/1/(x+1 1887 1887 ; )/2 1888 1888 $DGL 0,25 1889 1889 00286 CB440018 movw SDR02,#01800H ; 6144 ;[INF] 4, 1 1890 1890 ; line 695 : #else 1891 1891 ; line 696 : SDR02 = 5 << 9; // ボーレート設定 (8M/2)/1/(x+1) 1892 1892 ; /2 1893 1893 ; line 697 : #endif 1894 1894 ; line 698 : 1895 1895 ; line 699 : SO0 = 0x0404 | TAUS_MASK; // 最初はHH 1896 1896 $DGL 0,30 1897 1897 0028A 300F0F movw ax,#0F0FH ; 3855 ;[INF] 3, 1 1898 1898 0028D BF2801 movw !SO0,ax ;[INF] 3, 1 1899 1899 ; line 700 : iic_mcu_busy = 0; 1900 1900 $DGL 0,31 1901 1901 00290 R711300 clr1 _iic_mcu_busy ;[INF] 3, 2 1902 1902 ; line 701 : iic_mcu_wo_dma = 0; 1903 1903 $DGL 0,32 1904 1904 00293 R710300 clr1 _iic_mcu_wo_dma ;[INF] 3, 2 1905 1905 ; line 702 : 1906 1906 ; line 703 : 1907 1907 ; line 704 : // バスのリセット 1908 1908 ; line 705 : IICIF10 = 0; 1909 1909 $DGL 0,36 1910 1910 00296 710BE2 clr1 IF1L.0 ;[INF] 3, 2 1911 1911 ; line 706 : IICMK10 = 1; 1912 1912 $DGL 0,37 1913 1913 00299 710AE6 set1 MK1L.0 ;[INF] 3, 2 1914 1914 ; line 707 : 1915 1915 ; line 708 : iic_mcu_send_st(); 1916 1916 $DGL 0,39 1917 1917 0029C RFDEB01 call !_iic_mcu_send_st ;[INF] 3, 3 1918 1918 ; line 709 : 1919 1919 ; line 710 : SIO10 = 0xFF; 1920 1920 $DGL 0,41 1921 1921 0029F CE44FF mov SIO10,#0FFH ; 255 ;[INF] 3, 1 1922 1922 ; line 711 : while( IICIF10 == 0 ){} // 通信中 1923 1923 $DGL 0,42 1924 1924 002A2 ?L0078: 1925 1925 002A2 3182E202 bt IF1L.0,$?L0079 ;[INF] 4, 5 1926 1926 002A6 ??bb01_iic_mcu_start: 1927 1927 002A6 ??eb01_iic_mcu_start: 1928 1928 002A6 EFFA br $?L0078 ;[INF] 2, 3 1929 1929 002A8 ?L0079: 1930 1930 ; line 712 : iic_mcu_send_sp(); 1931 1931 $DGL 0,43 1932 1932 002A8 RFD3902 call !_iic_mcu_send_sp ;[INF] 3, 3 1933 1933 ; line 713 : 1934 1934 ; line 714 : SIR02 = SSR02; 1935 1935 $DGL 0,45 1936 1936 002AB AF0401 movw ax,!SSR02 ;[INF] 3, 1 1937 1937 002AE BF0C01 movw !SIR02,ax ;[INF] 3, 1 1938 1938 ; line 715 : 1939 1939 ; line 716 : iic_mcu_initialized = 1; 1940 1940 $DGL 0,47 1941 1941 002B1 R712200 set1 _iic_mcu_initialized ;[INF] 3, 2 1942 1942 ; line 717 : } 1943 1943 $DGL 0,48 1944 1944 002B4 ??ef_iic_mcu_start: 1945 1945 002B4 D7 ret ;[INF] 1, 6 1946 1946 002B5 ??ee_iic_mcu_start: 1947 1947 ; line 718 : 1948 1948 ; line 719 : 1949 1949 ; line 720 : 1950 1950 ; line 721 : /* ======================================================== 1951 1951 ; line 722 : モジュールの停止 1952 1952 ; line 723 : 再度使うときは初期化が必要 1953 1953 ; line 724 : ======================================================== */ 1954 1954 ; line 725 : void iic_mcu_stop( ) 1955 1955 ; line 726 : { 1956 1956 002B5 _iic_mcu_stop: 1957 1957 $DGL 1,242 1958 1958 002B5 ??bf_iic_mcu_stop: 1959 1959 ; line 727 : while( iic_mcu_busy ) 1960 1960 $DGL 0,2 1961 1961 002B5 ?L0082: 1962 1962 002B5 R31140002 bf _iic_mcu_busy,$?L0083 ;[INF] 4, 5 1963 1963 ; line 728 : {; 1964 1964 002B9 ??bb00_iic_mcu_stop: 1965 1965 002B9 ??eb00_iic_mcu_stop: 1966 1966 ; line 729 : } // DMA動作中はもう少し待つ 1967 1967 $DGL 0,4 1968 1968 002B9 EFFA br $?L0082 ;[INF] 2, 3 1969 1969 002BB ?L0083: 1970 1970 ; line 730 : iic_mcu_send_re_st( ); // SCL,SDAをLLにする 1971 1971 $DGL 0,5 1972 1972 002BB RFD1002 call !_iic_mcu_send_re_st ;[INF] 3, 3 1973 1973 ; line 731 : I2C_PU_off(); 1974 1974 $DGL 0,6 1975 1975 002BE ??bb01_iic_mcu_stop: 1976 1976 002BE 713A25 set1 PM5.3 ;[INF] 3, 2 1977 1977 002C1 713A23 set1 PM3.3 ;[INF] 3, 2 1978 1978 002C4 5A0EFC and P14,#0FCH ; 252 ;[INF] 3, 2 1979 1979 002C7 713305 clr1 P5.3 ;[INF] 3, 2 1980 1980 002CA 713B25 clr1 PM5.3 ;[INF] 3, 2 1981 1981 002CD 713303 clr1 P3.3 ;[INF] 3, 2 1982 1982 002D0 713B23 clr1 PM3.3 ;[INF] 3, 2 1983 1983 002D3 ??eb01_iic_mcu_stop: 1984 1984 ; line 732 : SAU0EN = 0; 1985 1985 $DGL 0,7 1986 1986 002D3 7128F000 clr1 !PER0.2 ;[INF] 4, 2 1987 1987 ; line 733 : iic_mcu_initialized = 0; 1988 1988 $DGL 0,8 1989 1989 002D7 R712300 clr1 _iic_mcu_initialized ;[INF] 3, 2 1990 1990 ; line 734 : } 1991 1991 $DGL 0,9 1992 1992 002DA ??ef_iic_mcu_stop: 1993 1993 002DA D7 ret ;[INF] 1, 6 1994 1994 002DB ??ee_iic_mcu_stop: 1995 1995 1996 1996 ----- @@CODEL CSEG 1997 1997 END 1998 1998 1999 1999 2000 2000 ; *** Code Information *** 2001 2001 ; 2002 2002 ; $FILE C:\78k_data\yav-mcu-basara\branches\0.10(fix)\i2c_mcu.c 2003 2003 ; 2004 2004 ; $FUNC nop8(76) 2005 2005 ; void=(void) 2006 2006 ; CODE SIZE= 1 bytes, CLOCK_SIZE= 6 clocks, STACK_SIZE= 0 bytes 2007 2007 ; 2008 2008 ; $FUNC iic_mcu_read_a_byte(87) 2009 2009 ; bc=(unsigned char SLA:x, unsigned char adrs:[sp+4]) 2010 2010 ; CODE SIZE= 111 bytes, CLOCK_SIZE= 118 clocks, STACK_SIZE= 10 bytes 2011 2011 ; 2012 2012 ; $CALL iic_mcu_start(93) 2013 2013 ; void=(void) 2014 2014 ; 2015 2015 ; $CALL iic_mcu_call_slave(110) 2016 2016 ; bc=(int:ax) 2017 2017 ; 2018 2018 ; $CALL iic_mcu_send_a_byte(118) 2019 2019 ; bc=(int:ax) 2020 2020 ; 2021 2021 ; $CALL iic_mcu_send_re_st(122) 2022 2022 ; void=(void) 2023 2023 ; 2024 2024 ; $CALL iic_mcu_send_a_byte(123) 2025 2025 ; bc=(int:ax) 2026 2026 ; 2027 2027 ; $CALL iic_mcu_send_sp(139) 2028 2028 ; void=(void) 2029 2029 ; 2030 2030 ; $FUNC iic_mcu_read(158) 2031 2031 ; bc=(unsigned char slave:x, unsigned char adrs:[sp+4], 2032 2032 ; unsigned char len:[sp+6], pointer dest:[sp+8]) 2033 2033 ; CODE SIZE= 111 bytes, CLOCK_SIZE= 141 clocks, STACK_SIZE= 12 bytes 2034 2034 ; 2035 2035 ; $CALL iic_mcu_start(165) 2036 2036 ; void=(void) 2037 2037 ; 2038 2038 ; $CALL iic_mcu_call_slave(188) 2039 2039 ; bc=(int:ax) 2040 2040 ; 2041 2041 ; $CALL iic_mcu_send_a_byte(195) 2042 2042 ; bc=(int:ax) 2043 2043 ; 2044 2044 ; $CALL iic_mcu_send_re_st(199) 2045 2045 ; void=(void) 2046 2046 ; 2047 2047 ; $CALL iic_mcu_send_a_byte(200) 2048 2048 ; bc=(int:ax) 2049 2049 ; 2050 2050 ; $CALL iic_mcu_send_sp(225) 2051 2051 ; void=(void) 2052 2052 ; 2053 2053 ; $FUNC iic_mcu_write_a_byte(242) 2054 2054 ; bc=(unsigned char SLA:x, unsigned char adrs:[sp+4], 2055 2055 ; unsigned char dat:[sp+6]) 2056 2056 ; CODE SIZE= 56 bytes, CLOCK_SIZE= 79 clocks, STACK_SIZE= 12 bytes 2057 2057 ; 2058 2058 ; $CALL iic_mcu_start(247) 2059 2059 ; void=(void) 2060 2060 ; 2061 2061 ; $CALL iic_mcu_call_slave(266) 2062 2062 ; bc=(int:ax) 2063 2063 ; 2064 2064 ; $CALL iic_mcu_send_a_byte(271) 2065 2065 ; bc=(int:ax) 2066 2066 ; 2067 2067 ; $CALL iic_mcu_send_a_byte(272) 2068 2068 ; bc=(int:ax) 2069 2069 ; 2070 2070 ; $CALL iic_mcu_send_sp(273) 2071 2071 ; void=(void) 2072 2072 ; 2073 2073 ; $FUNC iic_mcu_write(297) 2074 2074 ; bc=(unsigned char slave:x, unsigned char adrs:[sp+4], 2075 2075 ; unsigned char len:[sp+6], pointer src:[sp+8]) 2076 2076 ; CODE SIZE= 127 bytes, CLOCK_SIZE= 121 clocks, STACK_SIZE= 12 bytes 2077 2077 ; 2078 2078 ; $CALL iic_mcu_start(303) 2079 2079 ; void=(void) 2080 2080 ; 2081 2081 ; $CALL iic_mcu_call_slave(327) 2082 2082 ; bc=(int:ax) 2083 2083 ; 2084 2084 ; $FUNC int_dma1(388) 2085 2085 ; void=(void) 2086 2086 ; CODE SIZE= 108 bytes, CLOCK_SIZE= 86 clocks, STACK_SIZE= 26 bytes 2087 2087 ; 2088 2088 ; $CALL nop8(408) 2089 2089 ; void=(void) 2090 2090 ; 2091 2091 ; $CALL nop8(423) 2092 2092 ; void=(void) 2093 2093 ; 2094 2094 ; $FUNC int_iic10(452) 2095 2095 ; void=(void) 2096 2096 ; CODE SIZE= 109 bytes, CLOCK_SIZE= 83 clocks, STACK_SIZE= 26 bytes 2097 2097 ; 2098 2098 ; $CALL nop8(469) 2099 2099 ; void=(void) 2100 2100 ; 2101 2101 ; $CALL nop8(484) 2102 2102 ; void=(void) 2103 2103 ; 2104 2104 ; $FUNC iic_mcu_call_slave(513) 2105 2105 ; bc=(unsigned char slave:x) 2106 2106 ; CODE SIZE= 22 bytes, CLOCK_SIZE= 30 clocks, STACK_SIZE= 6 bytes 2107 2107 ; 2108 2108 ; $CALL iic_mcu_send_st(514) 2109 2109 ; void=(void) 2110 2110 ; 2111 2111 ; $CALL iic_mcu_send_a_byte(517) 2112 2112 ; bc=(int:ax) 2113 2113 ; 2114 2114 ; $CALL iic_mcu_send_sp(519) 2115 2115 ; void=(void) 2116 2116 ; 2117 2117 ; $FUNC iic_mcu_send_a_byte(533) 2118 2118 ; bc=(unsigned char dat:x) 2119 2119 ; CODE SIZE= 36 bytes, CLOCK_SIZE= 37 clocks, STACK_SIZE= 2 bytes 2120 2120 ; 2121 2121 ; $FUNC iic_mcu_send_st(556) 2122 2122 ; void=(void) 2123 2123 ; CODE SIZE= 37 bytes, CLOCK_SIZE= 32 clocks, STACK_SIZE= 4 bytes 2124 2124 ; 2125 2125 ; $CALL nop8(558) 2126 2126 ; void=(void) 2127 2127 ; 2128 2128 ; $FUNC iic_mcu_send_re_st(585) 2129 2129 ; void=(void) 2130 2130 ; CODE SIZE= 41 bytes, CLOCK_SIZE= 25 clocks, STACK_SIZE= 4 bytes 2131 2131 ; 2132 2132 ; $CALL nop8(588) 2133 2133 ; void=(void) 2134 2134 ; 2135 2135 ; $CALL nop8(603) 2136 2136 ; void=(void) 2137 2137 ; 2138 2138 ; $CALL iic_mcu_send_st(617) 2139 2139 ; void=(void) 2140 2140 ; 2141 2141 ; $FUNC iic_mcu_send_sp(627) 2142 2142 ; void=(void) 2143 2143 ; CODE SIZE= 32 bytes, CLOCK_SIZE= 31 clocks, STACK_SIZE= 4 bytes 2144 2144 ; 2145 2145 ; $CALL nop8(631) 2146 2146 ; void=(void) 2147 2147 ; 2148 2148 ; $CALL nop8(646) 2149 2149 ; void=(void) 2150 2150 ; 2151 2151 ; $FUNC iic_mcu_start(670) 2152 2152 ; void=(void) 2153 2153 ; CODE SIZE= 92 bytes, CLOCK_SIZE= 65 clocks, STACK_SIZE= 4 bytes 2154 2154 ; 2155 2155 ; $CALL nop8(677) 2156 2156 ; void=(void) 2157 2157 ; 2158 2158 ; $CALL iic_mcu_send_st(708) 2159 2159 ; void=(void) 2160 2160 ; 2161 2161 ; $CALL iic_mcu_send_sp(712) 2162 2162 ; void=(void) 2163 2163 ; 2164 2164 ; $FUNC iic_mcu_stop(726) 2165 2165 ; void=(void) 2166 2166 ; CODE SIZE= 38 bytes, CLOCK_SIZE= 35 clocks, STACK_SIZE= 4 bytes 2167 2167 ; 2168 2168 ; $CALL iic_mcu_send_re_st(730) 2169 2169 ; void=(void) 2170 2170 2171 2171 ; Target chip : uPD79F0104 2172 2172 ; Device file : E1.00b Segment informations: ADRS LEN NAME 00000 00000H.3 @@BITS 00000 00030H @@CNST 00000 00000H @@R_INIT 00000 00000H @@INIT 00000 00008H @@DATA 00000 00000H @@R_INIS 00000 00000H @@INIS 00000 00000H @@DATS 00000 00000H @@CNSTL 00000 00000H @@RLINIT 00000 00000H @@INITL 00000 00000H @@DATAL 00000 00000H @@CALT 00000 002DBH ROM_CODE 00000 000D9H @@BASE 00000 00000H @@CODEL Target chip : uPD79F0104 Device file : E1.00b Assembly complete, 0 error(s) and 0 warning(s) found. ( 0)