ARM中断方式串口编程
时间:11-09
来源:互联网
点击:
- ------------*/
- /
- Modifiedby:TIGER0-JOHN
- Modifieddate:2011-1-21
- Version:2.0
- Descriptions:测试成功
- 在用中断的时候在Startup.S文件中的InitStack子程序中,修改设置
- 系统模式堆栈处的代码为"MSRCPSR_c,#0x5f"
- 测试成功,在上面上发送16进制数时,每个之间用空格隔开
- 不加前缀
- /
- #include"config.h"
- uint8recver_buffer[8];
- uint8rcv_new;
- /
- *名称:UART0_Init
- *功能:UART0初始化通讯波特率115200,8位数据位,1位停止位,无奇偶校验
- *使能TxFIFO,和THRE中断
- *入口参数:bps串口波特率
- *出口参数:无
- /
- voidUART0_Init(uint32bps)
- {
- uint16Fdiv;
- PINSEL0=(PINSEL0&~(0xf)|0x05);//设置UART0的引脚
- U0LCR=0x83;//置位除数锁存位,配置UART0帧格式
- Fdiv=(Fpclk>>4)/bps;//根据波特率计算分频值
- U0DLM=Fp>>8;//设置波特率
- U0DLL=Fdiv%256;
- U0LCR=0x03;//清除除数锁存位,并设置工作模式
- U0FCR=0x05;//使能TxFIFO,并使TxFIFO复位
- U0IER=0x02;//使能THRE中断
- }
- /
- *名称:UART0_Exception
- *功能:串口发送中断
- *入口参数:无
- *出口参数:data发送的数据
- /
- void__irqIRQ_UART0(void)
- {
- uint32data;
- data=U0IIR;//清除中断表示寄存器标志
- VICVectAddr=0;//清除中断
- }
- /
- *名称:Interrupt_Init
- *功能:初始化串口中断,给串口中断选择为向量中断,
- *分配向量通道号1给串口
- *入口参数:无
- *出口参数:无
- /
- voidInterrupt_Init(void)
- {
- VICIntSelect=0x00000000;//设置所有通道为IRQ中断
- VICVectCntl0=0x26;//UART0中断通道分配到IRQslot0,即优先级最高
- VICVectAddr0=(int)IRQ_UART0;//设置UART0向量地址
- VICIntEnable=0x00000040;//使能UART0中断
- }
- /
- *名称:UART0_RcvByte
- *功能:用查询方式接收一字节的数据
- *入口参数:无
- *出口参数:data要接收的数据
- /
- uint8UART0_RcvByte(void)
- {
- uint8rcv_data;
- while((U0LSR&0X01)==0);//等待数据到达
- rcv_data=U0RBR;//从U0RBR中读出接收到的数据
- returnrcv_data;//返回接收到的数据
- }
- /
- *名称:UART0_RecBuf()
- *功能:接收串口发送过来的帧数据,
- *入口参数:*buffer存放一帧数据
- *出口参数:无
- /
- voidUART0_RecBuf(uint8*buffer)
- {
- uint8*pbuffer;
- uint8i;
- for(pbuffer=buffer,i=0;i<8;i++)
- {
- *(pbuffer++)=UART0_RcvByte();
- }
- }
- /
- *名称:main()函数
- *功能:上位机接收的数据开头两个字符为0x10,0x11,
- *则原样输出,否次输出0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
- *入口参数:*buffer存放一帧数据
- *出口参数:无
- /
- intmain(void)
- {
- uint8i;
- uint8send_buffer[8]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27};//定义发送帧缓冲区
- UART0_Init(115200);
- Interrupt_Init();
- while(1)
- {
- UART0_RecBuf(recver_buffer);//接收8字节数据
- if(0x10==recver_buffer[0]&&0x11==recver_buffer[1])
- {
- for(i=0;i<8;i++)
- {
- U0THR=send_buffer[i];//用中断发送每次8字节
- }
- }
- else
- {
- for(i=0;i<8;i++)//用中断发送每次8字节
- {
- U0THR=recver_buffer[i];
- }
- }
- }
- return0;
- }
- /*
- EndOfFile
- /
ARM中断方式串口编 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)