您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]bf561的串口
本帖共有380个阅读者
发表帖子 发表投票 回复主题
[求助]bf561的串口
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]bf561的串口

我在调试561的串口,用串口助手接收到的数据,总是对不上。这是配置程序

void UARTinit(unsigned short div)
{
  
    *pUART_GCTL=0x0001; // Irda mode 允许     0x0001 为UART MODE                                                                                      
    *pUART_LCR=0x0080;    // DLAB=1 允许访问DLL 和DLH
    *pUART_DLL=div;
    *pUART_DLH=div>>8;     // DLL DLH分别赋值
     *pUART_LCR=0x0003;    // 允许访问 RBR THR 和IER
    *pUART_IER=0x0001;    
}


void Test_TX()//数据发送
{
    int i;            
    for(i=0;i<1000;i++)            //发送测试函数,将生成的数据通过IR发送出去。
    {    
        
        *pUART_THR=0x5f;
        while(!(*pUART_LSR&0x0020));
    
    }

}

我就用几个独特的数据,发送0x55可以,但发送00就收到ff,发送44,接收到d7,求帮助


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/27 15:02:11
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
*pUART_GCTL=0x0001;
你把这句放到所有寄存器配置完成之后再执行试试


「该帖子被 andy 在 2013-12-29 20:35:17 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/29 20:33:33
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

还是不行,用示波器能看出数据来,我用的u转串hl-340


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/30 9:57:52
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
给你个BF561上之前跑通的代码,波特率那块你根据你的时钟再配配。
如果不行,检查你的串口芯片和串口连接线是否好的。
BF561在配置PLL时,需要coreB参与,才能生效,所以你要确保你的PLL配置已经生效

unsigned char flag=0;
unsigned short TXbuf[256];
unsigned short RXbuf[512];
#define  UART_9600bps 351
/****************************************************************************
* 名称 : UARTinit
* 功能 : 初始化UARTinit
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void UARTinit(unsigned short div)
{
  
*pUART_GCTL=0x0009;    //0x0001 为UART MODE                                                                                      
*pUART_LCR=0x0080; // DLAB=1 允许访问DLL 和DLH
*pUART_DLL=div;
*pUART_DLH=div>>8; // DLL DLH分别赋值
*pUART_LCR=0x0003; // 允许访问 RBR THR 和IER
*pUART_IER=0x0001;
}

/****************************************************************************
* 名称 : EX_INTERRUPT_HANDLER
* 功能 : 在中断中接受数据
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
static unsigned short cont=0;

EX_INTERRUPT_HANDLER(UART_ISR)
{
if(*pUART_LSR&DR)          //判断是否有新的数据。
{
if(cont>512) //防止buff溢出,测试代码,将接收到的数据重复写入512字节的buff
cont = 0;
RXbuf[cont]=*pUART_RBR;
cont++;
}
}

Test_TX()
{
int i;
for(i=0;i<0xff;i++) //发送测试函数,将生成的数据通过IR发送出去。
{
*pUART_THR=i;
     while(!(*pUART_LSR&0x0020));
    }

}

void Setup_Interrupt_irda(void)     //UART INT init
{
*pSICA_IAR3 = 0xfff2ffff;
register_handler (ik_ivg9, UART_ISR);  
    *pSICA_IMASK0 = 0x10000000;
}

void main()
{
Set_PLL( (short)(CORECLK/CLKIN), (short)(CORECLK/SYSCLK));
    Init_EBIU();  
    UARTinit(UART_9600bps); //设置串口波特率为9600bps
    Setup_Interrupt_irda();
    *pCtrOut_Flag_OE  &= (0xff&(~IRDA_SD)); //置低IRDA的SD脚
    while(1)
  
      {
          
     Test_TX(); //发送数据,测试接受数据时应屏蔽此函数,否则会干扰接受
       }


}


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/30 17:20:13
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159166 Call, 1 Queries, Processed in 0.015625 second(s),