4547|10

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口通讯 我用中断方式接受 怎么老式不行啊 请大虾们帮我看看啊 不胜感激!!!>>>>>> [复制链接]

#include "config.h"

uint16 Fdiv;
uint8 p;
uint8 flag_ri;

void __irq IRQ_UART0(void)
{
if(0x04==(U0IIR&0x0f))
{
  p=U0RBR;
  flag_ri=1;
}
VICVectAddr=0x00;
}

void DelayNS(uint32 dly)
{
uint32 i;
for (;dly>0;dly--)
for (i=0;i<50000;i++);
}


int main()
{
VICIntSelect=0x00000000;
VICVectCntl0=0x26;
VICVectAddr0=(uint32)IRQ_UART0;
VICIntEnable=0x00000040;

PCONP |= 0x08;
PINSEL0=0x00000005;
PINSEL1=0x00000000;
U0LCR=0X83;
  Fdiv = (Fpclk / 16) / 38400;  // 设置波特率
   U0DLM = Fdiv>>8;                           
   U0DLL = Fdiv&0xff;   
   U0LCR=0X03;
   U0FCR=0X07;
   U0IER=0x01;

while(1)
{
  

  if(flag_ri==1)
  {
           U0THR=p;
   while( (U0LSR&0x20)==0 );
   
  DelayNS(10);
  flag_ri=0;
  }
}

return 0;
}

最新回复

1、看看终端程序是否已被触发 2、如果没有的话,就要看初始化设置 3、初始化设置没问题的话,就看看其他模块根串口模块设置有没有冲突的地方 基本上就这个思路。祝兄弟好运~~  详情 回复 发表于 2008-9-15 17:25
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
具体你看一下这几方面:
一,物理连接
二,中断是否开启,有总EA还有串口自身的
三,串口是否允许接收?
四,串口的配置是否正确.
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
非常同意楼上的
另外补充一下在串口配置中涉及的有通讯波特率、校验、位数
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
可我在程序里都已经配置了啊  U0FCR=0X07;设置FIFO;
   U0IER=0x01;串口中断使能
本程序仅仅实现收一个字符发一个字符而已...可是有时接受中断不响应,有时是乱码....
请赐教啊......
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
可是有时接受中断不响应,有时是乱码

这个问题一般都是串口属性配置,波特率的偏移啥的....

调整一下具体的参数看看
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
请再加点注释,大家不希望看天书的。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
中断函数
void __irq IRQ_UART0 (void)
{
               
        if ((U0IIR & 0x0F) == 0x04)       
        {   
           if(uart_sen.counter0 == 0)
           {
                    uart_sen.rcv_dat0[uart_sen.counter0] = U0RBR;                // 读取FIFO的数据,并清除中断       
        
                  if(uart_sen.rcv_dat0[0] == 0x68)
                      {   
                         uart_sen.counter0++;
      
                          if(uart_sen.counter0 == 7)
             
                               {  
                                       uart_sen.rcv_new0 = 1;                 //UART0标志位置1
                       
                                  uart_sen.counter0 = 0;
                
                         }
                }
       }
       else
       {
           uart_sen.rcv_dat0[uart_sen.counter0] = U0RBR;       
           
           uart_sen.counter0++;
         
           if(uart_sen.counter0 == 7)
             
                               {  
                                       uart_sen.rcv_new0 = 1;              //UART0标志位置1
                       
                                  uart_sen.counter0 = 0;
                
                         }
       }
     }  
        VICVectAddr = 0x00;                                            // 中断处理结束
   
  }
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
中断的初始化
void  UART0_Init (void)
   
    {
      uint16 Fdiv;
      
      PINSEL0 = (PINSEL0&(~0x0f))|0x05;   /* Select the pins for Uart 选择管脚为UART0 */
      U0LCR=0x80;
      Fdiv=(Fpclk/16)/UART_BPS;
      U0DLM=Fdiv/256;
      U0DLL=Fdiv%256;
      U0LCR=0x03;
    //  U0IER=0x01;
      U0IER = 0x01;                                                // 允许RBR中断,即接收中断
      U0FCR = 0x01;                                        // 使能FIFO,并设置触发点为1字节
     }
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
我的数据是一个字节的收发,可能你的是8个字节的,你发的不是8个所以不行,一般最好采用一个字节一收发的,这样比较稳定,我在应用中一共用的是7个字节,我的E-mail:liudongfang720@163.com
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
触发值设为一,这倒是个省事办法
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
1、看看终端程序是否已被触发
2、如果没有的话,就要看初始化设置
3、初始化设置没问题的话,就看看其他模块根串口模块设置有没有冲突的地方

基本上就这个思路。祝兄弟好运~~
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表