📄 project.lst
字号:
012B C042 RJMP _SciBuffer_Init
(0089)
(0090) //********************************************************************
(0091) // Function : Enable_UART_RX_INT
(0092) // Input : none
(0093) // Output : none
(0094) // Description : Enable UART RX Interrupt
(0095) //********************************************************************
(0096) void Enable_UART_RX_INT(void)
(0097) {
(0098) UCSRB |= 0x80;
_Enable_UART_RX_INT:
012C 9A57 SBI 0x0A,7
(0099) }
012D 9508 RET
(0100)
(0101) //********************************************************************
(0102) // Function : Enable_UART_TX_INT
(0103) // Input : none
(0104) // Output : none
(0105) // Description : Enable UART TX Interrupt
(0106) //********************************************************************
(0107) void Enable_UART_TX_INT(void)
(0108) {
(0109) UCSRB |= 0x40;
_Enable_UART_TX_INT:
012E 9A56 SBI 0x0A,6
(0110) }
012F 9508 RET
(0111)
(0112) //********************************************************************
(0113) // Function : Disable_UART_RX_INT
(0114) // Input : none
(0115) // Output : none
(0116) // Description : Disable UART RX Interrupt
(0117) //********************************************************************
(0118) void Disable_UART_RX_INT(void)
(0119) {
(0120) UCSRB &= ~0x80;
_Disable_UART_RX_INT:
0130 9857 CBI 0x0A,7
(0121) }
0131 9508 RET
(0122)
(0123) //********************************************************************
(0124) // Function : Disable_UART_TX_INT
(0125) // Input : none
(0126) // Output : none
(0127) // Description : Disable UART TX Interrupt
(0128) //********************************************************************
(0129) void Disable_UART_TX_INT(void)
(0130) {
(0131) UCSRB &= ~0x40;
_Disable_UART_TX_INT:
0132 9856 CBI 0x0A,6
(0132) }
0133 9508 RET
(0133)
(0134) //********************************************************************
(0135) // Function : UART_TX_DATA
(0136) // Input : bData-data to be send
(0137) // Output : none
(0138) // Description : Write Data to UART TX Reigster
(0139) //********************************************************************
(0140) void UART_TX_DATA(INT8U bData)
(0141) {
(0142) UDR = bData;
_UART_TX_DATA:
bData --> R16
0134 B90C OUT 0x0C,R16
(0143) }
0135 9508 RET
(0144)
(0145) //********************************************************************
(0146) // Function : UART_RX_DATA
(0147) // Input : none
(0148) // Output : data received
(0149) // Description : Get Received Data from Register
(0150) //********************************************************************
(0151) INT8U UART_RX_DATA(void)
(0152) {
(0153) return(UDR);
_UART_RX_DATA:
0136 B10C IN R16,0x0C
0137 9508 RET
_sUART_RX_ISR:
data --> R20
0138 940E0723 CALL push_lset
013A 940E06FB CALL push_gset1
(0154) }
(0155)
(0156) //********************************************************************
(0157) // Function : sUART_RX_ISR
(0158) // Input : none
(0159) // Output : none
(0160) // Description : UART RX Interrupt Service Routine
(0161) //********************************************************************
(0162) #pragma interrupt_handler sUART_RX_ISR:12
(0163) void sUART_RX_ISR(void)
(0164) {
(0165) INT8U data;
(0166) //step1:read receive register to clear interrupt flag
(0167) data = UART_RX_DATA();
013C DFF9 RCALL _UART_RX_DATA
013D 2F40 MOV R20,R16
(0168) //step2:report event or store received char to buffer
(0169) if((data == 0x0A) || (data == 0x0D))
013E 300A CPI R16,0xA
013F F011 BEQ 0x0142
0140 300D CPI R16,0xD
0141 F459 BNE 0x014D
(0170) {
(0171) if(sbGetRxBufferEmptyStatus(&stSciBuffer) == false)
0142 E10C LDI R16,0x1C
0143 E011 LDI R17,1
0144 D07F RCALL _sbGetRxBufferEmptyStatus
0145 2300 TST R16
0146 F451 BNE 0x0151
(0172) {
(0173) SciBuffer_Rx_Reset(&stSciBuffer);
0147 E10C LDI R16,0x1C
0148 E011 LDI R17,1
0149 D082 RCALL _SciBuffer_Rx_Reset
(0174) sSet_SCI_Event(1);
014A E001 LDI R16,1
014B DFC4 RCALL _sSet_SCI_Event
(0175) }
(0176) }
014C C004 RJMP 0x0151
(0177) else
(0178) {
(0179) SciBuffer_Rx_In(&stSciBuffer,data);
014D 2F24 MOV R18,R20
014E E10C LDI R16,0x1C
014F E011 LDI R17,1
0150 D024 RCALL _SciBuffer_Rx_In
(0180) }
(0181) }
0151 940E06FE CALL pop_gset1
0153 940E073A CALL pop_lset
0155 9518 RETI
_sUART_TX_ISR:
bData --> R20
0156 940E0723 CALL push_lset
0158 940E06FB CALL push_gset1
(0182)
(0183) //********************************************************************
(0184) // Function : sUART_TX_ISR
(0185) // Input : none
(0186) // Output : none
(0187) // Description : UART TX Interrupt Service Routine
(0188) //********************************************************************
(0189) #pragma interrupt_handler sUART_TX_ISR:14
(0190) void sUART_TX_ISR(void)
(0191) {
(0192) INT8U bData;
(0193) if(sbGetTxBufferNoEmptyStatus(&stSciBuffer) == true)
015A E10C LDI R16,0x1C
015B E011 LDI R17,1
015C D055 RCALL _sbGetTxBufferNoEmptyStatus
015D 3001 CPI R16,1
015E F431 BNE 0x0165
(0194) {
(0195) bData = SciBuffer_Tx_Out(&stSciBuffer);
015F E10C LDI R16,0x1C
0160 E011 LDI R17,1
0161 D029 RCALL _SciBuffer_Tx_Out
0162 2F40 MOV R20,R16
(0196) UART_TX_DATA(bData);
0163 DFD0 RCALL _UART_TX_DATA
(0197) }
0164 C004 RJMP 0x0169
(0198) else
(0199) {
(0200) Disable_UART_TX_INT();
0165 DFCC RCALL _Disable_UART_TX_INT
(0201) SciBuffer_Tx_Reset(&stSciBuffer);
0166 E10C LDI R16,0x1C
0167 E011 LDI R17,1
0168 D067 RCALL _SciBuffer_Tx_Reset
(0202) }
(0203) }
0169 940E06FE CALL pop_gset1
016B 940E073A CALL pop_lset
016D 9518 RETI
(0204)
(0205) //********************************************************************
(0206) // Function : SciBuffer_Init
(0207) // Input : ptr-pointer to SCI Buffer
(0208) // Output : none
(0209) // Description : Initialization of SCI Buffer
(0210) //********************************************************************
(0211) void SciBuffer_Init(struct SCI_Buffer *ptr)
(0212) {
(0213) ptr->bRxLength = 0;
_SciBuffer_Init:
ptr --> R16
016E 2422 CLR R2
016F 01F8 MOVW R30,R16
0170 8220 STD Z+0,R2
(0214) ptr->bTxLength = 0;
0171 8221 STD Z+1,R2
(0215) ptr->bTxBufferLength = 0;
0172 01F8 MOVW R30,R16
0173 8222 STD Z+2,R2
(0216) }
0174 9508 RET
(0217)
(0218) //********************************************************************
(0219) // Function : SciBuffer_Rx_In
(0220) // Input : ptr-pointer to SCI Buffer
(0221) // Output : none
(0222) // Description : Add data into the SCI RX Buffer
(0223) //********************************************************************
(0224) void SciBuffer_Rx_In(struct SCI_Buffer *ptr,INT8U bData)
(0225) {
(0226) if(ptr->bRxLength < cMaxRxLength)
_SciBuffer_Rx_In:
bData --> R18
ptr --> R16
0175 01F8 MOVW R30,R16
0176 8180 LDD R24,Z+0
0177 3382 CPI R24,0x32
0178 F460 BCC 0x0185
(0227) {
(0228) ptr->bRxBuffer[ptr->bRxLength] = bData;
0179 01CF MOVW R24,R30
017A 9603 ADIW R24,3
017B 81E0 LDD R30,Z+0
017C 27FF CLR R31
017D 0FE8 ADD R30,R24
017E 1FF9 ADC R31,R25
017F 8320 STD Z+0,R18
(0229) ptr->bRxLength++;
0180 01F8 MOVW R30,R16
0181 8180 LDD R24,Z+0
0182 5F8F SUBI R24,0xFF
0183 8380 STD Z+0,R24
(0230) }
0184 C005 RJMP 0x018A
(0231) else
(0232) {
(0233) ptr->bRxBuffer[0] = bData;
0185 01F8 MOVW R30,R16
0186 8323 STD Z+3,R18
(0234) ptr->bRxLength = 1;
0187 E081 LDI R24,1
0188 01F8 MOVW R30,R16
0189 8380 STD Z+0,R24
(0235) }
(0236) }
018A 9508 RET
_SciBuffer_Tx_Out:
bData --> R20
ptr --> R16
018B 940E06FB CALL push_gset1
(0237)
(0238) //********************************************************************
(0239) // Function : SciBuffer_Tx_Out
(0240) // Input : ptr-pointer to SCI Buffer
(0241) // Output : data from SCI TX Buffer
(0242) // Description : Get data from the SCI TX Buffer
(0243) //********************************************************************
(0244) INT8U SciBuffer_Tx_Out(struct SCI_Buffer *ptr)
(0245) {
(0246) INT8U bData;
(0247) bData = ptr->bTxBuffer[ptr->bTxLength];
018D 01C8 MOVW R24,R16
018E 96C5 ADIW R24,0x35
018F 01F8 MOVW R30,R16
0190 81E1 LDD R30,Z+1
0191 27FF CLR R31
0192 0FE8 ADD R30,R24
0193 1FF9 ADC R31,R25
0194 8140 LDD R20,Z+0
(0248) ptr->bTxLength++;
0195 01C8 MOVW R24,R16
0196 9601 ADIW R24,1
0197 01FC MOVW R30,R24
0198 8180 LDD R24,Z+0
0199 5F8F SUBI R24,0xFF
019A 8380 STD Z+0,R24
(0249) return(bData);
019B 2F04 MOV R16,R20
019C 940E06FE CALL pop_gset1
019E 9508 RET
(0250) }
(0251)
(0252) //********************************************************************
(0253) // Function : SciBuffer_Tx_In
(0254) // Input : ptr-pointer to SCI Buffer
(0255) // Output : none
(0256) // Description : Add data into the SCI TX Buffer
(0257) //********************************************************************
(0258) void SciBuffer_Tx_In(struct SCI_Buffer *ptr,INT8U bData)
(0259) {
(0260) if(ptr->bTxBufferLength < cMaxTxLength)
_SciBuffer_Tx_In:
bData --> R18
ptr --> R16
019F 01F8 MOVW R30,R16
01A0 8182 LDD R24,Z+2
01A1 3684 CPI R24,0x64
01A2 F470 BCC 0x01B1
(0261) {
(0262) ptr->bTxBuffer[ptr->bTxBufferLength] = bData;
01A3 01C8 MOVW R24,R16
01A4 96C5 ADIW R24,0x35
01A5 01F8 MOVW R30,R16
01A6 81E2 LDD R30,Z+2
01A7 27FF CLR R31
01A8 0FE8 ADD R30,R24
01A9 1FF9 ADC R31,R25
01AA 8320 STD Z+0,R18
(0263) ptr->bTxBufferLength++;
01AB 01C8 MOVW R24,R16
01AC 9602 ADIW R24,2
01AD 01FC MOVW R30,R24
01AE 8180 LDD R24,Z+0
01AF 5F8F SUBI R24,0xFF
01B0 8380 STD Z+0,R24
(0264) }
(0265) }
01B1 9508 RET
(0266)
(0267) //********************************************************************
(0268) // Function : sbGetTxBufferNoEmptyStatus
(0269) // Input : ptr-pointer to SCI Buffer
(0270) // Output : Status of SCI TX Buffer
(0271) // Description : Check whether the SCI TX Buffer is empty or not
(0272) //********************************************************************
(0273) INT8U sbGetTxBufferNoEmptyStatus(struct SCI_Buffer *ptr)
(0274) {
(0275) if(ptr->bTxLength < ptr->bTxBufferLength)
_sbGetTxBufferNoEmptyStatus:
ptr --> R16
01B2 01F8 MOVW R30,R16
01B3 8022 LDD R2,Z+2
01B4 01F8 MOVW R30,R16
01B5 8031 LDD R3,Z+1
01B6 1432 CP R3,R2
01B7 F410 BCC 0x01BA
(0276) {
(0277) return(true);
01B8 E001 LDI R16,1
01B9 C001 RJMP 0x01BB
(0278) }
(0279) return(false);
01BA 2700 CLR R16
01BB 9508 RET
(0280) }
(0281)
(0282) //********************************************************************
(0283) // Function : sbGetTxBufferNoEmptyStatus
(0284) // Input : ptr-pointer to SCI Buffer
(0285) // Output : Status of SCI TX Buffer
(0286) // Description : Check whether the SCI TX Buffer is empty or not
(0287) //********************************************************************
(0288) INT8U sbGetTxBufferEmptyStatus(struct SCI_Buffer *ptr)
(0289) {
(0290) if(ptr->bTxBufferLength == 0)
_sbGetTxBufferEmptyStatus:
ptr --> R16
01BC 01F8 MOVW R30,R16
01BD 8022 LDD R2,Z+2
01BE 2022 TST R2
01BF F411 BNE 0x01C2
(0291) {
(0292) return(true);
01C0 E001 LDI R16,1
01C1 C001 RJMP 0x01C3
(0293) }
(0294) return(false);
01C2 2700 CLR R16
01C3 9508 RET
(0295) }
(0296)
(0297) //********************************************************************
(0298) // Function : sbGetRxBufferEmptyStatus
(0299) // Input : ptr-pointer to SCI Buffer
(0300) // Output : Status of SCI TX Buffer
(0301) // Description : Check whether the SCI TX Buffer is empty or not
(0302) //********************************************************************
(0303) INT8U sbGetRxBufferEmptyStatus(struct SCI_Buffer *ptr)
(0304) {
(0305) if(ptr->bRxLength == 0)
_sbGetRxBufferEmptyStatus:
ptr --> R16
01C4 01F8 MOVW R30,R16
01C5 8020 LDD R2,Z+0
01C6 2022 TST R2
01C7 F411 BNE 0x01CA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -