Uart.s43
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:13k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1.         NAME Uart
  2.         RTMODEL "__double_size", "32"
  3.         RTMODEL "__pic", "no"
  4.         RTMODEL "__reg_r4", "free"
  5.         RTMODEL "__reg_r5", "free"
  6.         RTMODEL "__rt_version", "1"
  7.         RSEG CSTACK:DATA:SORT:NOROOT(1)
  8.         EXTERN delay800ms
  9.         FUNCTION delay800ms,0202H
  10.         EXTERN aucUartRxBuf
  11.         EXTERN gpucTxBufPnt
  12.         EXTERN gwTxNum
  13.         EXTERN aucUartTxBuf
  14.         EXTERN gucTxBufCnt
  15.         EXTERN gucTimeOverflowCount
  16.         EXTERN gwTimeOverflowCount
  17.         EXTERN gucUartRxCnt
  18.         EXTERN gdwRxQueueRearCnt
  19.         EXTERN gpucQueueRear
  20.         EXTERN gucGeneralStatus
  21.         EXTERN ?longjmp_r4
  22.         EXTERN ?longjmp_r5
  23.         EXTERN ?setjmp_r4
  24.         EXTERN ?setjmp_r5
  25.         PUBWEAK ?setjmp_save_r4
  26.         PUBWEAK ?setjmp_save_r5
  27.         PUBWEAK BCSCTL1
  28.         PUBWEAK BCSCTL2
  29.         PUBWEAK IE1
  30.         PUBWEAK IFG1
  31.         PUBLIC InitUART
  32.         FUNCTION InitUART,021203H
  33.         LOCFRAME CSTACK, 4, STACK
  34.         PUBWEAK ME1
  35.         PUBWEAK P3DIR
  36.         PUBWEAK P3SEL
  37.         PUBWEAK RXBUF0
  38.         PUBWEAK TXBUF0
  39.         PUBWEAK UBR00
  40.         PUBWEAK UBR10
  41.         PUBWEAK UCTL0
  42.         PUBWEAK UMCTL0
  43.         PUBWEAK UTCTL0
  44.         PUBLIC UartReceive
  45.         FUNCTION UartReceive,0203H
  46.         LOCFRAME CSTACK, 2, STACK
  47.         PUBLIC UartSend
  48.         FUNCTION UartSend,0203H
  49.         LOCFRAME CSTACK, 2, STACK
  50.         PUBLIC UartStart
  51.         FUNCTION UartStart,0203H
  52.         LOCFRAME CSTACK, 2, STACK
  53.         PUBLIC intUartRx
  54.         FUNCTION intUartRx,021233H
  55.         LOCFRAME CSTACK, 12, STACK
  56.         PUBLIC intUartTx
  57.         FUNCTION intUartTx,021233H
  58.         LOCFRAME CSTACK, 12, STACK
  59.         
  60.         CFI Names cfiNames0
  61.         CFI StackFrame CFA SP DATA
  62.         CFI Resource PC:16, SP:16, SR:16, R4:16, R5:16, R6:16, R7:16, R8:16
  63.         CFI Resource R9:16, R10:16, R11:16, R12:16, R13:16, R14:16, R15:16
  64.         CFI EndNames cfiNames0
  65.         
  66.         CFI Common cfiCommon0 Using cfiNames0
  67.         CFI CodeAlign 2
  68.         CFI DataAlign 2
  69.         CFI ReturnAddress PC CODE
  70.         CFI CFA SP+2
  71.         CFI PC Frame(CFA, -2)
  72.         CFI SR Undefined
  73.         CFI R4 SameValue
  74.         CFI R5 SameValue
  75.         CFI R6 SameValue
  76.         CFI R7 SameValue
  77.         CFI R8 SameValue
  78.         CFI R9 SameValue
  79.         CFI R10 SameValue
  80.         CFI R11 SameValue
  81.         CFI R12 Undefined
  82.         CFI R13 Undefined
  83.         CFI R14 Undefined
  84.         CFI R15 Undefined
  85.         CFI EndCommon cfiCommon0
  86.         
  87.         
  88.         CFI Common cfiCommon1 Using cfiNames0
  89.         CFI CodeAlign 2
  90.         CFI DataAlign 2
  91.         CFI ReturnAddress PC CODE
  92.         CFI CFA SP+4
  93.         CFI PC Frame(CFA, -2)
  94.         CFI SR Frame(CFA, -4)
  95.         CFI R4 SameValue
  96.         CFI R5 SameValue
  97.         CFI R6 SameValue
  98.         CFI R7 SameValue
  99.         CFI R8 SameValue
  100.         CFI R9 SameValue
  101.         CFI R10 SameValue
  102.         CFI R11 SameValue
  103.         CFI R12 SameValue
  104.         CFI R13 SameValue
  105.         CFI R14 SameValue
  106.         CFI R15 SameValue
  107.         CFI EndCommon cfiCommon1
  108.         
  109. // E:projectFaxProgramVson_Bryan_Fax_Conexant_070423filesUart.c
  110. //    1 //UART
  111. //    2 #include "includeH.h"
  112.         ASEGN DATA16_AN:DATA:NOROOT,00H
  113. // unsigned char volatile __data IE1
  114. IE1:
  115.         DS8 1
  116.         ASEGN DATA16_AN:DATA:NOROOT,02H
  117. // unsigned char volatile __data IFG1
  118. IFG1:
  119.         DS8 1
  120.         ASEGN DATA16_AN:DATA:NOROOT,04H
  121. // unsigned char volatile __data ME1
  122. ME1:
  123.         DS8 1
  124.         ASEGN DATA16_AN:DATA:NOROOT,01aH
  125. // unsigned char volatile __data P3DIR
  126. P3DIR:
  127.         DS8 1
  128.         ASEGN DATA16_AN:DATA:NOROOT,01bH
  129. // unsigned char volatile __data P3SEL
  130. P3SEL:
  131.         DS8 1
  132.         ASEGN DATA16_AN:DATA:NOROOT,070H
  133. // unsigned char volatile __data UCTL0
  134. UCTL0:
  135.         DS8 1
  136.         ASEGN DATA16_AN:DATA:NOROOT,071H
  137. // unsigned char volatile __data UTCTL0
  138. UTCTL0:
  139.         DS8 1
  140.         ASEGN DATA16_AN:DATA:NOROOT,073H
  141. // unsigned char volatile __data UMCTL0
  142. UMCTL0:
  143.         DS8 1
  144.         ASEGN DATA16_AN:DATA:NOROOT,074H
  145. // unsigned char volatile __data UBR00
  146. UBR00:
  147.         DS8 1
  148.         ASEGN DATA16_AN:DATA:NOROOT,075H
  149. // unsigned char volatile __data UBR10
  150. UBR10:
  151.         DS8 1
  152.         ASEGN DATA16_AN:DATA:NOROOT,076H
  153. // unsigned char const volatile __data RXBUF0
  154. RXBUF0:
  155.         DS8 1
  156.         ASEGN DATA16_AN:DATA:NOROOT,077H
  157. // unsigned char volatile __data TXBUF0
  158. TXBUF0:
  159.         DS8 1
  160.         ASEGN DATA16_AN:DATA:NOROOT,057H
  161. // unsigned char volatile __data BCSCTL1
  162. BCSCTL1:
  163.         DS8 1
  164.         ASEGN DATA16_AN:DATA:NOROOT,058H
  165. // unsigned char volatile __data BCSCTL2
  166. BCSCTL2:
  167.         DS8 1
  168. //    3 
  169. //    4 
  170.         RSEG CODE:CODE:NOROOT(1)
  171. //    5 void InitUART(void)                    //初始化UART
  172. InitUART:
  173.         CFI Block cfiBlock0 Using cfiCommon0
  174.         CFI Function InitUART
  175. //    6 {      
  176.         FUNCALL InitUART, delay800ms
  177.         LOCFRAME CSTACK, 4, STACK
  178. PUSH.W R10
  179.         CFI R10 Frame(CFA, -4)
  180.         CFI CFA SP+4
  181. //    7        unsigned int ucGeneralCnt;
  182. //    8        //WDTCTL=WDTPW+WDTHOLD;              //close watch dog
  183. //    9        //DCOCTL &= ~DCO2;
  184. //   10        BCSCTL1|=XTS;     //MCLK时钟源  Select LFXTCLK high frequency
  185. BIS.B #0x40, &0x57
  186. //   11        BCSCTL2|=SELM_3;     //MCLK时钟源  Select LFXTCLK   //+DIVM_3 
  187. BIS.B #0xc0, &0x58
  188. //   12        
  189. //   13        do                                  //等待时钟稳定    
  190. //   14        {   IFG1 &= ~OFIFG;
  191. ??InitUART_1:
  192. BIC.B #0x2, &0x2
  193. //   15            for(ucGeneralCnt=0;ucGeneralCnt<0xff;ucGeneralCnt++);    
  194. MOV.W #0x0, R10
  195. ??InitUART_0:
  196. CMP.W #0xff, R10
  197. JC ??InitUART_3
  198. ADD.W #0x1, R10
  199. JMP ??InitUART_0
  200. //   16        }while ((IFG1 & OFIFG)==OFIFG);
  201. ??InitUART_3:
  202. BIT.B #0x2, &0x2
  203. JC ??InitUART_1
  204. //   17        
  205. //   18        UCTL0=0X00;
  206. MOV.B #0x0, &0x70
  207. //   19        UCTL0|=SWRST;                       //disable soft reset  
  208. BIS.B #0x1, &0x70
  209. //   20        UCTL0|=CHAR;                         //8 bits
  210. BIS.B #0x10, &0x70
  211. //   21        //UCTL0|=LISTEN;                       //OPEN LISTEN    
  212. //   22        UTCTL0=SSEL0;                  //BaudRate generate select ACLK    
  213. MOV.B #0x10, &0x71
  214. //   23        UBR10=0X03;//0x1a;//0X03;//0X02;  0x03;//0X00; //BaudRate==9600
  215. MOV.B #0x3, &0x75
  216. //   24        UBR00=0X41;//0x0a;//0X41;//0X2b;  0x41;//0X49;    
  217. MOV.B #0x41, &0x74
  218. //   25        UMCTL0=0X00;    
  219. MOV.B #0x0, &0x73
  220. //   26        UCTL0&=~SWRST;                      //enable soft reset USART    
  221. BIC.B #0x1, &0x70
  222. //   27        ME1|=URXE0+UTXE0;                   //enable TXD and RXD    
  223. BIS.B #0xc0, &0x4
  224. //   28        IE1|=URXIE0;                        //enable RX interrupt
  225. BIS.B #0x40, &0x0
  226. //   29        IE1|=UTXIE0;                        //enable TX interrupt    
  227. BIS.B #0x80, &0x0
  228. //   30        IFG1=0X00;                          //clear IFG1    
  229. MOV.B #0x0, &0x2
  230. //   31        P3SEL|=0x30;//0x00;//0X30;                       //P3.4 P3.5 for USART    
  231. BIS.B #0x30, &0x1b
  232. //   32        P3DIR|=BIT4;                         //P3.4 tx OUTPUT 
  233. BIS.B #0x10, &0x1a
  234. //   33        
  235. //   34        delay800ms();
  236. CALL #delay800ms
  237. //   35        for(ucGeneralCnt=0;ucGeneralCnt<255;ucGeneralCnt++)
  238. MOV.W #0x0, R10
  239. ??InitUART_2:
  240. CMP.W #0xff, R10
  241. JC ??InitUART_4
  242. //   36        { 
  243. //   37             aucUartRxBuf[ucGeneralCnt]=0;    //clear RX buffer
  244. MOV.B #0x0, aucUartRxBuf(R10)
  245. //   38        }                      
  246. ADD.W #0x1, R10
  247. JMP ??InitUART_2
  248. //   39        _EINT();                             //enable interrupt
  249. ??InitUART_4:
  250. EINT
  251. //   40        
  252. //   41 }//InitUART()
  253. POP.W R10
  254.         CFI R10 SameValue
  255.         CFI CFA SP+2
  256. RET
  257.         CFI EndBlock cfiBlock0
  258. //   42     
  259. //   43     
  260. //   44     
  261.         RSEG CODE:CODE:NOROOT(1)
  262. //   45 void UartStart(void)                   //启动发送
  263. UartStart:
  264.         CFI Block cfiBlock1 Using cfiCommon0
  265.         CFI Function UartStart
  266. //   46 {    
  267. //   47        //ATcmdDelay();
  268. //   48        //ATcmdDelay();  
  269. //   49        IE1 |= UTXIE0;
  270. BIS.B #0x80, &0x0
  271. //   50        gpucTxBufPnt = 0;
  272. MOV.B #0x0, &gpucTxBufPnt
  273. //   51        gwTxNum = 4;
  274. MOV.W #0x4, &gwTxNum
  275. //   52        while((UTCTL0&BIT0) != BIT0);        //TXEPT: 1 empty 0 full 
  276. ??UartStart_0:
  277. BIT.B #0x1, &0x71
  278. JNC ??UartStart_0
  279. //   53        TXBUF0 = aucUartTxBuf[0];    
  280. MOV.B &aucUartTxBuf, &0x77
  281. //   54        gucTxBufCnt = 1;
  282. MOV.B #0x1, &gucTxBufCnt
  283. //   55            
  284. //   56        //IFG1 |=  UTXIFG0;                //Entry TX interrupt
  285. //   57            
  286. //   58 }
  287. RET
  288.         CFI EndBlock cfiBlock1
  289. //   59            
  290. //   60            
  291. //   61        
  292.         RSEG CODE:CODE:SORT:NOROOT(1)
  293. //   62 void UartReceive(void)                 //receive
  294. UartReceive:
  295.         CFI Block cfiBlock2 Using cfiCommon0
  296.         CFI Function UartReceive
  297. //   63 {   
  298. //   64        gucTimeOverflowCount=0;//clear Rx Fax time flowover
  299. MOV.B #0x0, &gucTimeOverflowCount
  300. //   65        gwTimeOverflowCount=0; //clear Rx Fax time flowover  
  301. MOV.W #0x0, &gwTimeOverflowCount
  302. //   66        aucUartRxBuf[gucUartRxCnt]=RXBUF0;
  303. MOV.B &gucUartRxCnt, R14
  304. AND.W #0xff, R14
  305. MOV.B &0x76, aucUartRxBuf(R14)
  306. //   67        gucUartRxCnt+=1;
  307. ADD.B #0x1, &gucUartRxCnt
  308. //   68        gdwRxQueueRearCnt++;    //Queue length inc
  309. ADD.W #0x1, &gdwRxQueueRearCnt
  310. ADDC.W #0x0, &gdwRxQueueRearCnt + 0x2
  311. //   69        gpucQueueRear++;       //entry Queue Rear Point inc
  312. ADD.B #0x1, &gpucQueueRear
  313. //   70              
  314. //   71 }//UartReceive
  315. RET
  316.         CFI EndBlock cfiBlock2
  317. //   72                
  318. //   73                
  319.         RSEG CODE:CODE:NOROOT(1)
  320. //   74 void UartSend(void)                    //transmit
  321. UartSend:
  322.         CFI Block cfiBlock3 Using cfiCommon0
  323.         CFI Function UartSend
  324. //   75 {   
  325. //   76        gpucTxBufPnt+=1; //TxBufCnt point to the second data.The second data will be sent now
  326. ADD.B #0x1, &gpucTxBufPnt
  327. //   77        if(gpucTxBufPnt<gwTxNum)//check whether send next data      
  328. MOV.B &gpucTxBufPnt, R14
  329. AND.W #0xff, R14
  330. CMP.W &gwTxNum, R14
  331. JC ??UartSend_0
  332. //   78        {   
  333. //   79           TXBUF0=aucUartTxBuf[gucTxBufCnt];          
  334. MOV.B &gucTxBufCnt, R14
  335. AND.W #0xff, R14
  336. MOV.B aucUartTxBuf(R14), &0x77
  337. //   80           gucTxBufCnt++;
  338. ADD.B #0x1, &gucTxBufCnt
  339. RET
  340. //   81           //if(gucTxBufCnt>22){gucTxBufCnt=0;}               
  341. //   82        }    
  342. //   83        else     
  343. //   84           {     
  344. //   85              gpucTxBufPnt=0;                        
  345. ??UartSend_0:
  346. MOV.B #0x0, &gpucTxBufPnt
  347. //   86              gucTxBufCnt=0;                                      
  348. MOV.B #0x0, &gucTxBufCnt
  349. //   87           }
  350. //   88 }
  351. RET
  352.         CFI EndBlock cfiBlock3
  353. //   89             
  354. //   90 //**************************************************************/            
  355. //   91             
  356. //   92 #pragma vector=USART0TX_VECTOR            
  357.         RSEG CODE:CODE:SORT:NOROOT(1)
  358. //   93 __interrupt void intUartTx(void)//发送中断响应
  359. intUartTx:
  360.         CFI Block cfiBlock4 Using cfiCommon1
  361.         CFI Function intUartTx
  362. //   94 {
  363.         FUNCALL intUartTx, UartSend
  364.         LOCFRAME CSTACK, 12, STACK
  365. PUSH.W R13
  366.         CFI R13 Frame(CFA, -6)
  367.         CFI CFA SP+6
  368. PUSH.W R12
  369.         CFI R12 Frame(CFA, -8)
  370.         CFI CFA SP+8
  371. PUSH.W R15
  372.         CFI R15 Frame(CFA, -10)
  373.         CFI CFA SP+10
  374. PUSH.W R14
  375.         CFI R14 Frame(CFA, -12)
  376.         CFI CFA SP+12
  377. //   95        UartSend();
  378. CALL #UartSend
  379. //   96 }
  380. POP.W R14
  381.         CFI R14 SameValue
  382.         CFI CFA SP+10
  383. POP.W R15
  384.         CFI R15 SameValue
  385.         CFI CFA SP+8
  386. POP.W R12
  387.         CFI R12 SameValue
  388.         CFI CFA SP+6
  389. POP.W R13
  390.         CFI R13 SameValue
  391.         CFI CFA SP+4
  392. RETI
  393.         CFI EndBlock cfiBlock4
  394. //   97 
  395. //   98 #pragma vector=USART0RX_VECTOR
  396.         RSEG CODE:CODE:SORT:NOROOT(1)
  397. //   99 __interrupt  void intUartRx(void)//接收中断响应
  398. intUartRx:
  399.         CFI Block cfiBlock5 Using cfiCommon1
  400.         CFI Function intUartRx
  401. //  100 {
  402.         FUNCALL intUartRx, UartReceive
  403.         LOCFRAME CSTACK, 12, STACK
  404. PUSH.W R13
  405.         CFI R13 Frame(CFA, -6)
  406.         CFI CFA SP+6
  407. PUSH.W R12
  408.         CFI R12 Frame(CFA, -8)
  409.         CFI CFA SP+8
  410. PUSH.W R15
  411.         CFI R15 Frame(CFA, -10)
  412.         CFI CFA SP+10
  413. PUSH.W R14
  414.         CFI R14 Frame(CFA, -12)
  415.         CFI CFA SP+12
  416. //  101     gucGeneralStatus |= bitModemActive;
  417. BIS.B #0x2, &gucGeneralStatus
  418. //  102     UartReceive();   
  419. CALL #UartReceive
  420. //  103 } 
  421. POP.W R14
  422.         CFI R14 SameValue
  423.         CFI CFA SP+10
  424. POP.W R15
  425.         CFI R15 SameValue
  426.         CFI CFA SP+8
  427. POP.W R12
  428.         CFI R12 SameValue
  429.         CFI CFA SP+6
  430. POP.W R13
  431.         CFI R13 SameValue
  432.         CFI CFA SP+4
  433. RETI
  434.         CFI EndBlock cfiBlock5
  435.         RSEG CODE:CODE:NOROOT(1)
  436. ?setjmp_save_r4:
  437. REQUIRE ?setjmp_r4
  438. REQUIRE ?longjmp_r4
  439.         RSEG CODE:CODE:NOROOT(1)
  440. ?setjmp_save_r5:
  441. REQUIRE ?setjmp_r5
  442. REQUIRE ?longjmp_r5
  443.         COMMON INTVEC:CODE:ROOT(1)
  444.         ORG 16
  445. DC16 intUartTx
  446.         COMMON INTVEC:CODE:ROOT(1)
  447.         ORG 18
  448. DC16 intUartRx
  449.         END
  450. // 
  451. // 304 bytes in segment CODE
  452. //  14 bytes in segment DATA16_AN
  453. //   4 bytes in segment INTVEC
  454. // 
  455. // 308 bytes of CODE memory
  456. //   0 bytes of DATA memory (+ 14 bytes shared)
  457. //
  458. //Errors: none
  459. //Warnings: none