📄 usart.lst
字号:
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE usart
OBJECT MODULE PLACED IN .\out\usart.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe usart.c THUMB BROWSE DEBUG PRINT(.\OUT\USART.LST) TABS(4) OBJECT(.\out\usart
-.obj)
stmt level source
1 #include "usart.h"
2
3 /************************************************************************
4 函数功能: 串口0初始化函数(非中断模式)
5 入口参数:
6 出口参数:
7 ************************************************************************/
8 void uartinit(void)
9 {
10 1 *AT91C_PMC_PCER|=0x00000040; //PMC外设时钟使能
11 1 *AT91C_PIOA_PDR|=0x00000060; //Disable I/O,PA5=RXD0,PA6=TXD0
12 1 *AT91C_PIOA_ASR|=0x00000060; //PIO分配成UART
13 1 *AT91C_US0_CR=0XAC; //RESET UART
14 1 *AT91C_US0_MR=0X8C0; //8bit,No,1Bit Stop
15 1 *AT91C_US0_IDR=0XF3FFF; //Disable UART Interrupt
16 1 //*AT91C_US0_BRGR=26; //BARD RATE:38400(CD=30)
17 1 *AT91C_US0_BRGR=30;
18 1 *AT91C_US0_CR=0X50; //SET UART
19 1 }
20
21 /************************************************************************
22 函数功能: 串口1初始化函数(非中断模式)
23 入口参数:
24 出口参数:
25 波特率=9600
26 ************************************************************************/
27 void Usart1_Init(void)
28 {
29 1 *AT91C_PMC_PCER=(unsigned int)1<<AT91C_ID_US1; //PMC外设时钟使能
30 1 *AT91C_PIOA_PDR=AT91C_PA21_RXD1 | AT91C_PA22_TXD1; //Disable I/O,PA5=RXD0,PA6=TXD0
31 1 *AT91C_PIOA_ASR=AT91C_PA21_RXD1 | AT91C_PA22_TXD1; //PIO分配成UART
32 1 *AT91C_US1_CR=0XAC; //RESET UART
33 1 *AT91C_US1_MR=0X8C0; //8bit,No,1Bit Stop
34 1 *AT91C_US1_IDR=0XF3FFF; //Disable UART Interrupt
35 1 //在MCK=18.432M时,波特率(MCK/16)/CD=9600
36 1 *AT91C_US1_BRGR=120;
37 1 *AT91C_US1_CR=0X50; //SET UART
38 1 }
39 /************************************************************************
40 函数功能: 串口0接收中断服务函数
41 入口参数:
42 出口参数:
43 ************************************************************************/
44 void Uart0ISR(void) __irq
45 {
46 1 unsigned int s=0;
47 1 unsigned char ch=0;
48 1 static unsigned char bI=0;
49 1
50 1 s = AT91C_BASE_US0->US_CSR;
51 1
52 1 if(s&0x01) // RXRDY
53 1 {
54 2 ch = AT91C_BASE_US0->US_RHR;
55 2 g_bpData[bI++] = AT91C_BASE_US0->US_RHR;
56 2 if (bI==20)
57 2 {
58 3 bI = 0;
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 2
59 3 }
60 2 }
61 1 /*
62 1 if(s&0x02) // TXRDY
63 1 {
64 1 ;
65 1 }*/
66 1 AT91C_BASE_AIC->AIC_EOICR = 1;//End of Interrupt
67 1 }
68 /************************************************************************
69 函数功能: 串口0初始化函数(中断模式)
70 入口参数:
71 出口参数:
72 ************************************************************************/
73 void uart0init(void)
74 {
75 1 *AT91C_PMC_PCER|=0x00000040; //PMC外设时钟使能
76 1 *AT91C_PIOA_PDR|=0x00000060; //Disable I/O,PA5=RXD0,PA6=TXD0
77 1 *AT91C_PIOA_ASR|=0x00000060; //PIO分配成UART
78 1 *AT91C_US0_CR=0XAC; //RESET UART
79 1 *AT91C_US0_MR=0X8C0; //8bit,No,1Bit Stop
80 1 *AT91C_US0_IDR=0XF3FFF; //Disable UART Interrupt
81 1 //*AT91C_US0_BRGR=26; //BARD RATE:38400(CD=30)
82 1 *AT91C_US0_BRGR=30;
83 1 *AT91C_US0_CR=0X50; //SET UART
84 1 /************************/
85 1 AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE | 1;
86 1 AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0]=(unsigned int) Uart0ISR;//赋中断服务函数指针
87 1 AT91C_BASE_US0->US_IDR=0xF3FFF; // disable all interrupts
88 1 AT91C_BASE_US0->US_IER=0x01;//允许接收中断
89 1 AT91C_BASE_AIC->AIC_IECR = (unsigned int)1<<AT91C_ID_US0;
90 1 /************************/
91 1 }
92 unsigned char putcharme (unsigned char ch)
93 { //Write Character to Serial Port
94 1 if (ch == '\n')
95 1 { // Check for CR
96 2 while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
97 2 *AT91C_US0_THR = '\r'; // Output CR
98 2 }
99 1 while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
100 1 return (*AT91C_US0_THR = ch); // Transmit Character
101 1 }
102
103
104 void helloworld(void)
105 {
106 1 unsigned char hello[]={'h','e','l','l','o',' ','w','o','r','l','d','!','\n',};
107 1 unsigned char i;
108 1 for(i=0;i<13;i++)
109 1 {
110 2 putcharme(hello[i]);
111 2 }
112 1 }
113
114 void USART0_send_string(unsigned char *bpSendData,unsigned int length)
115 {
116 1 while(length--)
117 1 {
118 2 putcharme(*(bpSendData++));
119 2 }
120 1 putcharme(0x0a);
121 1 }
122 void Receivechar(void)
123 {
124 1 if ((*AT91C_US0_CSR) & AT91C_US_RXRDY)
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 3
125 1 {
126 2 bpRBuff[g_bRBuffpiont] = *AT91C_US0_RHR;
127 2 g_bRBuffpiont++;
128 2 }
129 1 }
130 unsigned char Usart1_putchar (unsigned char ch)
131 { //Write Character to Serial Port
132 1 if (ch == '\n')
133 1 { // Check for CR
134 2 while (!((*AT91C_US1_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
135 2 *AT91C_US1_THR = '\r'; // Output CR
136 2 }
137 1 while (!((*AT91C_US1_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
138 1 return (*AT91C_US1_THR = ch); // Transmit Character
139 1 }
140
141 void hello_laogao(void)
142 {
143 1 unsigned char hello1[]={'h','e','l','l','o',' ','L','a','o','g','a','o','\n',};
144 1 unsigned char i;
145 1
146 1 for(i=0;i<13;i++)
147 1 {
148 2 Usart1_putchar(hello1[i]);
149 2 }
150 1 }
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** PUBLICS:
PUBLIC uartinit?T
PUBLIC uart0init?T
PUBLIC putcharme?T
PUBLIC helloworld?T
PUBLIC USART0_send_string?T
PUBLIC Receivechar?T
PUBLIC Usart1_Init?T
PUBLIC Usart1_putchar?T
PUBLIC hello_laogao?T
PUBLIC Uart0ISR?A
PUBLIC g_bRBuffpiont
PUBLIC bpRBuff
PUBLIC g_bpData
*** DATA SEGMENT '?DT0?usart':
00000000 g_bRBuffpiont:
00000000 DS 1
00000001 bpRBuff:
00000001 DS 256
00000101 g_bpData:
00000101 DS 20
00000115 bI:
00000115 BEGIN_INIT
00000115 00 DB 0x0
00000116 END_INIT
*** DATA SEGMENT '?CON?usart':
00000000 ?tpl?0001:
00000000 BEGIN_INIT
00000000 68 DB 0x68
00000001 65 DB 0x65
00000002 6C DB 0x6C
00000003 6C DB 0x6C
00000004 6F DB 0x6F
00000005 20 DB 0x20
00000006 77 DB 0x77
00000007 6F DB 0x6F
00000008 72 DB 0x72
00000009 6C DB 0x6C
0000000A 64 DB 0x64
0000000B 21 DB 0x21
0000000C 0A DB 0xA
0000000D END_INIT
0000000D ALIGN 4
00000010 ?tpl?0002:
00000010 BEGIN_INIT
00000010 68 DB 0x68
00000011 65 DB 0x65
00000012 6C DB 0x6C
00000013 6C DB 0x6C
00000014 6F DB 0x6F
00000015 20 DB 0x20
00000016 4C DB 0x4C
00000017 61 DB 0x61
00000018 6F DB 0x6F
00000019 67 DB 0x67
0000001A 61 DB 0x61
0000001B 6F DB 0x6F
0000001C 0A DB 0xA
0000001D END_INIT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -