⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u0test.c

📁 基于ARMLPC2114编写的串口例程大家来讨论
💻 C
字号:
   #include  "config.h"   
/*整个程序所掉用基本头文件*/

#define FPCLK   11059200
/*定义总线速率*/

#define uart_BPS 9600
/*定义串口波特率*/

void  delay(uint32 dly)
{  uint32  i;
   for(;dly>0;dly--)
      for(i=0;i<5000;i++);
}
/*定义延时函数*/

typedef struct  Uartmode    /*定义串口模式*/
{
uint8 datab;    //字长度,5/6/7/8
uint8 stopb;    //停止位,1/2
uint8 parity;   //奇偶校验,0为无校验,1为奇数校验,2为偶数校验
}Uartmode;

/*中断服务程序*/
void __irq IRQ_UART0(void)
{
uint32  i;  /*定义参数*/

if( 0x04==(U0IIR&0x0F) ) rcv_new = 1;  // 设置接收到新的数据标志
for(i=0; i<8; i++)
{ 
rcv_buf[i] = U0RBR;   // 读取FIFO的数据,并且清除中断
}
VICVectAddr = 0x00;  // 中断处理结束
}

/*初始化串口0,设置其波特率及工作模式*/
uint8  UART0_Ini(uint32 baud, Uartmode set)
{  uint32  bak;
   
   /* 参数过滤 */
if( (0==baud)||(baud>115200) ) //波特率在0-115200之间
return(0);
if( (set.datab<5)||(set.datab>8) )  //字长度在5-8字节
return(0);
if( (0==set.stopb)||(set.stopb>2) ) //停止位超过两位 
return(0);
if( set.parity>4 ) //设置奇偶校验位
return(0);

/* 设置串口波特率 */
uint16 Fdiv;
U0LCR = 0X83; /* UO线控制寄存器  定义数据字符格式  01000011  */
Fdiv = (Fpclk/16)/uart_BPS;
U0DLL = Fdiv/256; /* baud=F(pclk)/16/UODLL  */
U0DLM = Fdiv%256; /* 与U0DLL组成波特率,DLL是低8位,DLM是高8位*/
U0LCR = 0x03; /* */
   
/* 设置串口模式 */
bak = set.datab-5;                   // 设置字长度
if(2==set.stopb) bak |= 0x04;        // 判断是否为2位停止位  
if(0!=set.parity) set.parity = set.parity-1;
bak |= set.parity;                   // 设置奇偶校验
U0LCR = bak;
return(1);
}

int  main(void)
{  
Uartmode  uart0_set;
/*串口模式设定*/
PINSEL0 = 0x00000005;    // 设置I/O连接到UART0
PINSEL1 = 0x00000000;
rcv_new = 0;  /*接收缓冲器清空*/
   
uart0_set.datab = 8;                 // 8位数据位
uart0_set.stopb = 1;                 // 1位停止位
uart0_set.parity = 0;                // 无奇偶校验
UART0_Ini(9600, uart0_set);          // 初始化串口模式
   
U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节
      
/* 设置中断允许 */
VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
VICVectCntl0 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
VICVectAddr0 = (int)IRQ_UART0;       // 设置UART0向量地址
VICIntEnable = 0x00000040;           // 使能UART0中断

while(1)                             // 等待中断
{ if(1==rcv_new)
{  
ISendBuf();   // 将接收到的数据发送回主机
rcv_new = 0;  
/*接收缓冲器清空*/
}
delay(30)
}
return(0)
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -