📄 uart.lst
字号:
###############################################################################
# #
# 04/Dec/2008 16:07:53 #
# IAR ARM ANSI C/C++ Compiler V5.11.0.20622/W32 EVALUATION #
# Copyright 1999-2007 IAR Systems. All rights reserved. #
# #
# Cpu mode = thumb #
# Endian = little #
# Source file = E:\ELE\yten\pro\message\uart.c #
# Command line = E:\ELE\yten\pro\message\uart.c -D EMB_FLASH -lcN #
# E:\ELE\yten\pro\Release\List\ -o #
# E:\ELE\yten\pro\Release\Obj\ --no_cse --no_unroll #
# --no_inline --no_code_motion --no_tbaa --no_clustering #
# --no_scheduling --debug --endian little --cpu Cortex-M3 #
# -e --fpu None --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\DLib_Config_Normal.h" -I #
# E:\ELE\yten\pro\ -I E:\ELE\yten\pro\..\LIBRARY\INC\ -I #
# "C:\Program Files\IAR Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\" -On #
# List file = E:\ELE\yten\pro\Release\List\uart.lst #
# Object file = E:\ELE\yten\pro\Release\Obj\uart.o #
# #
# #
###############################################################################
E:\ELE\yten\pro\message\uart.c
1 #include"includes.h"
2 #include"ytep.h"
3 #include"ytepfunction.h"
4 const Int16U BAUD_TAB[]={19500-50,9600,4800-50};
5 /*************************************************************************/
6 Boolean FifoPush(pUartFifo_t Fifo, USART_TypeDef* USARTx)
7 {
8 volatile Int32U IndxTmp;
9 Fifo->Timer=0;
10 Fifo->PopIndx=0;
11 if(Fifo->PushIndx<20)
12 {
13 IndxTmp=Fifo->PushIndx;
14 Fifo->Buffer[IndxTmp]=USART_ReceiveData(USART1);//USARTx->DR;
15 Fifo->PushIndx++;
16 return (FALSE);
17 }else
18 {
19 IndxTmp =USART_ReceiveData(USART1);
20 return (TRUE);
21 }
22
23 }
24 /*************************************************************************/
25 Boolean FifoPop(pUartFifo_t Fifo,USART_TypeDef* USARTx)
26 {
27 volatile Int32U IndxTmp;
28 if(Fifo->PopIndx<=(Fifo->PushIndx+1))
29 {
30 IndxTmp=Fifo->PopIndx;
31 USARTx->DR=Fifo->Buffer[IndxTmp];
32 Fifo->PopIndx++;
33 }else
34 {
35 return (FALSE);
36 }
37 return (TRUE);
38 }
39 /////////////////////////////////////////////
40 void Uart1Isr(void)
41 {
42 volatile unsigned int uart;
43 if(USART_GetFlagStatus(USART1,USART_FLAG_ORE))
44 {
45 USART_ClearFlag(USART1,USART_FLAG_ORE);
46 Uart1LineEvents.bOE = TRUE;
47 }
48 if(USART_GetFlagStatus(USART1,USART_FLAG_FE))
49 {
50 USART_ClearFlag(USART1,USART_FLAG_FE);
51 // Framing Error
52 Uart1LineEvents.bFE = TRUE;
53 }
54 if(USART_GetFlagStatus(USART1,USART_FLAG_NE))
55 {
56 USART_ClearFlag(USART1,USART_FLAG_NE);
57 // Noise Error
58 Uart1LineEvents.bFE = TRUE;
59 }
60 if(USART_GetFlagStatus(USART1,USART_FLAG_PE))
61 {
62 USART_ClearFlag(USART1,USART_FLAG_PE);
63 // Parity Error
64 Uart1LineEvents.bPE = TRUE;
65 }
66
67 if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE))// Push a new data into the receiver buffer
68 {
69 //USART1_485RXD;
70 uart=FifoPush(pUart1RxFifo,USART1); // Push a new data into the receiver buffer
71 }
72
73 if(USART_GetFlagStatus(USART1,USART_FLAG_TXE)
74 && (USART_GetITStatus (USART1,USART_IT_TXE) == SET))
75 {
76 USART_ClearFlag(USART1,USART_FLAG_TXE);
77 USART1_485TXD;
78 if(FifoPop(pUart1TxFifo,USART1));
79 else
80 {
81 USART_ITConfig(USART1,USART_IT_TXE ,DISABLE);//USART_IT_TXE指明是CRx,
82 USART1_485RXD;
83 pUart1RxFifo->UsartStatus=pUart1TxFifo->UsartStatus=0;
84 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
85 }
86 }
87 //if(Uart1RxFifo.PushIndx>20)
88 //USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);
89 //uart=USART1->SR;
90 //uart=USART1->DR;
91 //uart=USART1->CR1 ;
92
93 }
94 /****************************************************
95 *
96 *
97 *****************************************************/
98 Boolean UsartRXD(pUartFifo_t Fifo,pUartFifo_t TFifo)
99 {
100 Int16U x,x1;
101 x=0;
102 if(Fifo->UsartStatus!=0)
103 {
104 USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);
105 if(++TFifo->Timer>=250) Fifo->UsartStatus=0;
106 return FALSE;
107 }
108 USART1_485RXD;
109 TFifo->Timer=0;
110 ++Fifo->Timer;
111 if((Fifo->PushIndx!=0)&&(Fifo->Timer>=C_FifoRxd)) //
112 {
113 if(Fifo->PushIndx>=2)
114 x=Fifo->PushIndx-2;
115 x1=Fifo->Buffer[x+1];
116 x1<<=8;
117 x1+=Fifo->Buffer[x];
118 x=cal_crc(Fifo->Buffer,(Int8U)x);
119 if((x==x1)&&(Fifo->Buffer[0]==_YT._ELE[0]))
120 {
121 USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);
122 Fifo->Timer=Fifo->PushIndx=0;
123 Fifo->UsartStatus=1;
124 return TRUE;
125 }
126 Fifo->Timer=0,Fifo->PushIndx=0;//USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
127 }else
128 if(Fifo->Timer>=C_FifoRxd)
129 {
130 Fifo->Timer=0,Fifo->PushIndx=0;//没收到数据
131
132 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//接收非空使能
133
134 }
135
136 return FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -