Uart.s43
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:13k
- NAME Uart
- RTMODEL "__double_size", "32"
- RTMODEL "__pic", "no"
- RTMODEL "__reg_r4", "free"
- RTMODEL "__reg_r5", "free"
- RTMODEL "__rt_version", "1"
- RSEG CSTACK:DATA:SORT:NOROOT(1)
- EXTERN delay800ms
- FUNCTION delay800ms,0202H
- EXTERN aucUartRxBuf
- EXTERN gpucTxBufPnt
- EXTERN gwTxNum
- EXTERN aucUartTxBuf
- EXTERN gucTxBufCnt
- EXTERN gucTimeOverflowCount
- EXTERN gwTimeOverflowCount
- EXTERN gucUartRxCnt
- EXTERN gdwRxQueueRearCnt
- EXTERN gpucQueueRear
- EXTERN gucGeneralStatus
- EXTERN ?longjmp_r4
- EXTERN ?longjmp_r5
- EXTERN ?setjmp_r4
- EXTERN ?setjmp_r5
- PUBWEAK ?setjmp_save_r4
- PUBWEAK ?setjmp_save_r5
- PUBWEAK BCSCTL1
- PUBWEAK BCSCTL2
- PUBWEAK IE1
- PUBWEAK IFG1
- PUBLIC InitUART
- FUNCTION InitUART,021203H
- LOCFRAME CSTACK, 4, STACK
- PUBWEAK ME1
- PUBWEAK P3DIR
- PUBWEAK P3SEL
- PUBWEAK RXBUF0
- PUBWEAK TXBUF0
- PUBWEAK UBR00
- PUBWEAK UBR10
- PUBWEAK UCTL0
- PUBWEAK UMCTL0
- PUBWEAK UTCTL0
- PUBLIC UartReceive
- FUNCTION UartReceive,0203H
- LOCFRAME CSTACK, 2, STACK
- PUBLIC UartSend
- FUNCTION UartSend,0203H
- LOCFRAME CSTACK, 2, STACK
- PUBLIC UartStart
- FUNCTION UartStart,0203H
- LOCFRAME CSTACK, 2, STACK
- PUBLIC intUartRx
- FUNCTION intUartRx,021233H
- LOCFRAME CSTACK, 12, STACK
- PUBLIC intUartTx
- FUNCTION intUartTx,021233H
- LOCFRAME CSTACK, 12, STACK
-
- CFI Names cfiNames0
- CFI StackFrame CFA SP DATA
- CFI Resource PC:16, SP:16, SR:16, R4:16, R5:16, R6:16, R7:16, R8:16
- CFI Resource R9:16, R10:16, R11:16, R12:16, R13:16, R14:16, R15:16
- CFI EndNames cfiNames0
-
- CFI Common cfiCommon0 Using cfiNames0
- CFI CodeAlign 2
- CFI DataAlign 2
- CFI ReturnAddress PC CODE
- CFI CFA SP+2
- CFI PC Frame(CFA, -2)
- CFI SR Undefined
- CFI R4 SameValue
- CFI R5 SameValue
- CFI R6 SameValue
- CFI R7 SameValue
- CFI R8 SameValue
- CFI R9 SameValue
- CFI R10 SameValue
- CFI R11 SameValue
- CFI R12 Undefined
- CFI R13 Undefined
- CFI R14 Undefined
- CFI R15 Undefined
- CFI EndCommon cfiCommon0
-
-
- CFI Common cfiCommon1 Using cfiNames0
- CFI CodeAlign 2
- CFI DataAlign 2
- CFI ReturnAddress PC CODE
- CFI CFA SP+4
- CFI PC Frame(CFA, -2)
- CFI SR Frame(CFA, -4)
- CFI R4 SameValue
- CFI R5 SameValue
- CFI R6 SameValue
- CFI R7 SameValue
- CFI R8 SameValue
- CFI R9 SameValue
- CFI R10 SameValue
- CFI R11 SameValue
- CFI R12 SameValue
- CFI R13 SameValue
- CFI R14 SameValue
- CFI R15 SameValue
- CFI EndCommon cfiCommon1
-
- // E:projectFaxProgramVson_Bryan_Fax_Conexant_070423filesUart.c
- // 1 //UART
- // 2 #include "includeH.h"
- ASEGN DATA16_AN:DATA:NOROOT,00H
- // unsigned char volatile __data IE1
- IE1:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,02H
- // unsigned char volatile __data IFG1
- IFG1:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,04H
- // unsigned char volatile __data ME1
- ME1:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,01aH
- // unsigned char volatile __data P3DIR
- P3DIR:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,01bH
- // unsigned char volatile __data P3SEL
- P3SEL:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,070H
- // unsigned char volatile __data UCTL0
- UCTL0:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,071H
- // unsigned char volatile __data UTCTL0
- UTCTL0:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,073H
- // unsigned char volatile __data UMCTL0
- UMCTL0:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,074H
- // unsigned char volatile __data UBR00
- UBR00:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,075H
- // unsigned char volatile __data UBR10
- UBR10:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,076H
- // unsigned char const volatile __data RXBUF0
- RXBUF0:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,077H
- // unsigned char volatile __data TXBUF0
- TXBUF0:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,057H
- // unsigned char volatile __data BCSCTL1
- BCSCTL1:
- DS8 1
- ASEGN DATA16_AN:DATA:NOROOT,058H
- // unsigned char volatile __data BCSCTL2
- BCSCTL2:
- DS8 1
- // 3
- // 4
- RSEG CODE:CODE:NOROOT(1)
- // 5 void InitUART(void) //初始化UART
- InitUART:
- CFI Block cfiBlock0 Using cfiCommon0
- CFI Function InitUART
- // 6 {
- FUNCALL InitUART, delay800ms
- LOCFRAME CSTACK, 4, STACK
- PUSH.W R10
- CFI R10 Frame(CFA, -4)
- CFI CFA SP+4
- // 7 unsigned int ucGeneralCnt;
- // 8 //WDTCTL=WDTPW+WDTHOLD; //close watch dog
- // 9 //DCOCTL &= ~DCO2;
- // 10 BCSCTL1|=XTS; //MCLK时钟源 Select LFXTCLK high frequency
- BIS.B #0x40, &0x57
- // 11 BCSCTL2|=SELM_3; //MCLK时钟源 Select LFXTCLK //+DIVM_3
- BIS.B #0xc0, &0x58
- // 12
- // 13 do //等待时钟稳定
- // 14 { IFG1 &= ~OFIFG;
- ??InitUART_1:
- BIC.B #0x2, &0x2
- // 15 for(ucGeneralCnt=0;ucGeneralCnt<0xff;ucGeneralCnt++);
- MOV.W #0x0, R10
- ??InitUART_0:
- CMP.W #0xff, R10
- JC ??InitUART_3
- ADD.W #0x1, R10
- JMP ??InitUART_0
- // 16 }while ((IFG1 & OFIFG)==OFIFG);
- ??InitUART_3:
- BIT.B #0x2, &0x2
- JC ??InitUART_1
- // 17
- // 18 UCTL0=0X00;
- MOV.B #0x0, &0x70
- // 19 UCTL0|=SWRST; //disable soft reset
- BIS.B #0x1, &0x70
- // 20 UCTL0|=CHAR; //8 bits
- BIS.B #0x10, &0x70
- // 21 //UCTL0|=LISTEN; //OPEN LISTEN
- // 22 UTCTL0=SSEL0; //BaudRate generate select ACLK
- MOV.B #0x10, &0x71
- // 23 UBR10=0X03;//0x1a;//0X03;//0X02; 0x03;//0X00; //BaudRate==9600
- MOV.B #0x3, &0x75
- // 24 UBR00=0X41;//0x0a;//0X41;//0X2b; 0x41;//0X49;
- MOV.B #0x41, &0x74
- // 25 UMCTL0=0X00;
- MOV.B #0x0, &0x73
- // 26 UCTL0&=~SWRST; //enable soft reset USART
- BIC.B #0x1, &0x70
- // 27 ME1|=URXE0+UTXE0; //enable TXD and RXD
- BIS.B #0xc0, &0x4
- // 28 IE1|=URXIE0; //enable RX interrupt
- BIS.B #0x40, &0x0
- // 29 IE1|=UTXIE0; //enable TX interrupt
- BIS.B #0x80, &0x0
- // 30 IFG1=0X00; //clear IFG1
- MOV.B #0x0, &0x2
- // 31 P3SEL|=0x30;//0x00;//0X30; //P3.4 P3.5 for USART
- BIS.B #0x30, &0x1b
- // 32 P3DIR|=BIT4; //P3.4 tx OUTPUT
- BIS.B #0x10, &0x1a
- // 33
- // 34 delay800ms();
- CALL #delay800ms
- // 35 for(ucGeneralCnt=0;ucGeneralCnt<255;ucGeneralCnt++)
- MOV.W #0x0, R10
- ??InitUART_2:
- CMP.W #0xff, R10
- JC ??InitUART_4
- // 36 {
- // 37 aucUartRxBuf[ucGeneralCnt]=0; //clear RX buffer
- MOV.B #0x0, aucUartRxBuf(R10)
- // 38 }
- ADD.W #0x1, R10
- JMP ??InitUART_2
- // 39 _EINT(); //enable interrupt
- ??InitUART_4:
- EINT
- // 40
- // 41 }//InitUART()
- POP.W R10
- CFI R10 SameValue
- CFI CFA SP+2
- RET
- CFI EndBlock cfiBlock0
- // 42
- // 43
- // 44
- RSEG CODE:CODE:NOROOT(1)
- // 45 void UartStart(void) //启动发送
- UartStart:
- CFI Block cfiBlock1 Using cfiCommon0
- CFI Function UartStart
- // 46 {
- // 47 //ATcmdDelay();
- // 48 //ATcmdDelay();
- // 49 IE1 |= UTXIE0;
- BIS.B #0x80, &0x0
- // 50 gpucTxBufPnt = 0;
- MOV.B #0x0, &gpucTxBufPnt
- // 51 gwTxNum = 4;
- MOV.W #0x4, &gwTxNum
- // 52 while((UTCTL0&BIT0) != BIT0); //TXEPT: 1 empty 0 full
- ??UartStart_0:
- BIT.B #0x1, &0x71
- JNC ??UartStart_0
- // 53 TXBUF0 = aucUartTxBuf[0];
- MOV.B &aucUartTxBuf, &0x77
- // 54 gucTxBufCnt = 1;
- MOV.B #0x1, &gucTxBufCnt
- // 55
- // 56 //IFG1 |= UTXIFG0; //Entry TX interrupt
- // 57
- // 58 }
- RET
- CFI EndBlock cfiBlock1
- // 59
- // 60
- // 61
- RSEG CODE:CODE:SORT:NOROOT(1)
- // 62 void UartReceive(void) //receive
- UartReceive:
- CFI Block cfiBlock2 Using cfiCommon0
- CFI Function UartReceive
- // 63 {
- // 64 gucTimeOverflowCount=0;//clear Rx Fax time flowover
- MOV.B #0x0, &gucTimeOverflowCount
- // 65 gwTimeOverflowCount=0; //clear Rx Fax time flowover
- MOV.W #0x0, &gwTimeOverflowCount
- // 66 aucUartRxBuf[gucUartRxCnt]=RXBUF0;
- MOV.B &gucUartRxCnt, R14
- AND.W #0xff, R14
- MOV.B &0x76, aucUartRxBuf(R14)
- // 67 gucUartRxCnt+=1;
- ADD.B #0x1, &gucUartRxCnt
- // 68 gdwRxQueueRearCnt++; //Queue length inc
- ADD.W #0x1, &gdwRxQueueRearCnt
- ADDC.W #0x0, &gdwRxQueueRearCnt + 0x2
- // 69 gpucQueueRear++; //entry Queue Rear Point inc
- ADD.B #0x1, &gpucQueueRear
- // 70
- // 71 }//UartReceive
- RET
- CFI EndBlock cfiBlock2
- // 72
- // 73
- RSEG CODE:CODE:NOROOT(1)
- // 74 void UartSend(void) //transmit
- UartSend:
- CFI Block cfiBlock3 Using cfiCommon0
- CFI Function UartSend
- // 75 {
- // 76 gpucTxBufPnt+=1; //TxBufCnt point to the second data.The second data will be sent now
- ADD.B #0x1, &gpucTxBufPnt
- // 77 if(gpucTxBufPnt<gwTxNum)//check whether send next data
- MOV.B &gpucTxBufPnt, R14
- AND.W #0xff, R14
- CMP.W &gwTxNum, R14
- JC ??UartSend_0
- // 78 {
- // 79 TXBUF0=aucUartTxBuf[gucTxBufCnt];
- MOV.B &gucTxBufCnt, R14
- AND.W #0xff, R14
- MOV.B aucUartTxBuf(R14), &0x77
- // 80 gucTxBufCnt++;
- ADD.B #0x1, &gucTxBufCnt
- RET
- // 81 //if(gucTxBufCnt>22){gucTxBufCnt=0;}
- // 82 }
- // 83 else
- // 84 {
- // 85 gpucTxBufPnt=0;
- ??UartSend_0:
- MOV.B #0x0, &gpucTxBufPnt
- // 86 gucTxBufCnt=0;
- MOV.B #0x0, &gucTxBufCnt
- // 87 }
- // 88 }
- RET
- CFI EndBlock cfiBlock3
- // 89
- // 90 //**************************************************************/
- // 91
- // 92 #pragma vector=USART0TX_VECTOR
- RSEG CODE:CODE:SORT:NOROOT(1)
- // 93 __interrupt void intUartTx(void)//发送中断响应
- intUartTx:
- CFI Block cfiBlock4 Using cfiCommon1
- CFI Function intUartTx
- // 94 {
- FUNCALL intUartTx, UartSend
- LOCFRAME CSTACK, 12, STACK
- PUSH.W R13
- CFI R13 Frame(CFA, -6)
- CFI CFA SP+6
- PUSH.W R12
- CFI R12 Frame(CFA, -8)
- CFI CFA SP+8
- PUSH.W R15
- CFI R15 Frame(CFA, -10)
- CFI CFA SP+10
- PUSH.W R14
- CFI R14 Frame(CFA, -12)
- CFI CFA SP+12
- // 95 UartSend();
- CALL #UartSend
- // 96 }
- POP.W R14
- CFI R14 SameValue
- CFI CFA SP+10
- POP.W R15
- CFI R15 SameValue
- CFI CFA SP+8
- POP.W R12
- CFI R12 SameValue
- CFI CFA SP+6
- POP.W R13
- CFI R13 SameValue
- CFI CFA SP+4
- RETI
- CFI EndBlock cfiBlock4
- // 97
- // 98 #pragma vector=USART0RX_VECTOR
- RSEG CODE:CODE:SORT:NOROOT(1)
- // 99 __interrupt void intUartRx(void)//接收中断响应
- intUartRx:
- CFI Block cfiBlock5 Using cfiCommon1
- CFI Function intUartRx
- // 100 {
- FUNCALL intUartRx, UartReceive
- LOCFRAME CSTACK, 12, STACK
- PUSH.W R13
- CFI R13 Frame(CFA, -6)
- CFI CFA SP+6
- PUSH.W R12
- CFI R12 Frame(CFA, -8)
- CFI CFA SP+8
- PUSH.W R15
- CFI R15 Frame(CFA, -10)
- CFI CFA SP+10
- PUSH.W R14
- CFI R14 Frame(CFA, -12)
- CFI CFA SP+12
- // 101 gucGeneralStatus |= bitModemActive;
- BIS.B #0x2, &gucGeneralStatus
- // 102 UartReceive();
- CALL #UartReceive
- // 103 }
- POP.W R14
- CFI R14 SameValue
- CFI CFA SP+10
- POP.W R15
- CFI R15 SameValue
- CFI CFA SP+8
- POP.W R12
- CFI R12 SameValue
- CFI CFA SP+6
- POP.W R13
- CFI R13 SameValue
- CFI CFA SP+4
- RETI
- CFI EndBlock cfiBlock5
- RSEG CODE:CODE:NOROOT(1)
- ?setjmp_save_r4:
- REQUIRE ?setjmp_r4
- REQUIRE ?longjmp_r4
- RSEG CODE:CODE:NOROOT(1)
- ?setjmp_save_r5:
- REQUIRE ?setjmp_r5
- REQUIRE ?longjmp_r5
- COMMON INTVEC:CODE:ROOT(1)
- ORG 16
- DC16 intUartTx
- COMMON INTVEC:CODE:ROOT(1)
- ORG 18
- DC16 intUartRx
- END
- //
- // 304 bytes in segment CODE
- // 14 bytes in segment DATA16_AN
- // 4 bytes in segment INTVEC
- //
- // 308 bytes of CODE memory
- // 0 bytes of DATA memory (+ 14 bytes shared)
- //
- //Errors: none
- //Warnings: none