📄 main.c
字号:
#include "AT91SAM7S64.h"
#include "SAM7S.h" //自定义的头文件
#define Bautrate 115200 //在这里设置波特率
#define USART_INTERRUPT_LEVEL 7
void USART0_send_byte(unsigned int data);
void USART0_send_string(unsigned char *s);
//本次试着用中断来接收数据
__ramfunc void urt_irq_handler(void) //US0的接收中断函数
{
uint status=0;
//* get Usart status register
status = US0_CSR; //判别如果是接收到了字符
if ( status & AT91C_US_RXRDY)
{
USART0_send_byte(US0_RHR&0xff); //发送接收到的字符
}
//US0_CSR=AT91C_US_RSTSTA; //清除US0的状态
}
void USART_init(void)
{
PMC_PCER=1<<AT91C_ID_US0;
//PIO外设功能时钟始能USART0的时钟
PIO_PDR=(AT91C_PA5_RXD0|AT91C_PA6_TXD0);
//PIO使能USART0对应的引脚的外设功能
PIO_ASR=(AT91C_PA5_RXD0|AT91C_PA6_TXD0);
//外设A分配给USART0外设A功能
US0_CR=((1<<4)|(1<<6)); //允许接收和发送
US0_MR=(AT91C_US_USMODE_NORMAL|AT91C_US_CLKS_CLOCK|AT91C_US_CHRL_8_BITS|(4<<8));
//普通USART模式,主时钟,8字节数据,无效验
US0_BRGR=48054850/(16*Bautrate); //设置波特率
US0_IER=0x1; //允许接收中断
AT91C_AIC_SVR[AT91C_ID_US0]=(unsigned int)*urt_irq_handler;
//中断向量US0的中断处理函数所在的地址
AIC_IECR=0X1<<AT91C_ID_US0; //系统里面允许USART0中断
}
void USART0_send_byte(unsigned int data)
{
US0_THR=data; //写入要发送的数据
while((US0_CSR&2)==0); //等待发送器就绪
//US0_THR=US0_THR|0x100; //发送数据
}
unsigned int USART0_get_byte(void)
{
//uint temp=0;
while((US0_CSR&1)==0); //等待接收器就绪
//temp=AIC_IVR; //读取中断向量
return US0_RHR;
}
void USART0_send_string(unsigned char *s)
{
while(*s)
{
USART0_send_byte(*s);
s++;
}
}
int main(void)
{
uint i=0,temp=0;
USART_init(); //初始化USART0;
while(1)
{
i++;
temp=US0_CSR; //循环死等
}
return 0;
}
//__irq __arm
//#pragma vector=0x118
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -