您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 【已解决】[求助]BF592的uart輸入
本帖共有738个阅读者
发表帖子 发表投票 回复主题
【已解决】[求助]BF592的uart輸入
qwe90369(论坛新手)
qwe90369
头衔:社区公民
帮派:无帮无派
帖数:13
金钱:235
积分:21
注册时间:2013/10/29
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
【已解决】[求助]BF592的uart輸入
請問如何用以下程式抓UART RX的資料
#include <cdefBF592-A.h>
#include <sys\exception.h>



unsigned char RXbuf[512];

//unsigned char TXbuf[50]={"0"};
int cont;


void Set_PLL(int pmsel,int pssel)
{
    int new_PLL_CTL;
    *pPLL_DIV = pssel;
    asm("ssync;");
    new_PLL_CTL = (pmsel & 0x3f) << 9;
    *pSIC_IWR |= 0xffffffff;
    if (new_PLL_CTL != *pPLL_CTL)
    {
        *pPLL_CTL = new_PLL_CTL;
        asm("ssync;");
        asm("idle;");
    }
}


EX_INTERRUPT_HANDLER(UART_ISR);

void UARTinit(unsigned short div)
{

    *pPORTF_FER |= ( PF11 | PF12 );

    /* configure UART0 RX and UART0 TX pins */
    *pPORTF_MUX &= ~(PF11 | PF12 );
    
    *pUART0_GCTL=0x0009;                                                                                        
    *pUART0_LCR=0x0080;// DLAB=1 允許訪問DLL 和DLH
    *pUART0_DLL=div;
    *pUART0_DLH=div>>8; //DLL DLH分別輸出
    *pUART0_LCR=0x0003;//  允許訪問 RBR THR 睿IER
    *pUART0_IER=0x0001;//  允許接收中斷
}

EX_INTERRUPT_HANDLER(UART_ISR)
{  
    if(*pUART0_LSR&DR)          //判斷是否有新數據
    {
        if(cont>512)            //防止buff溢位,測試,將接收到的數據重複寫入512字元的Buff
        cont = 0;      
        RXbuf[cont]=*pUART0_RBR;
        cont++;
    }
}

void Init_Interrupts(void)
{
    *pSIC_IAR0 = 0xffffffff;
    *pSIC_IAR1 = 0xf3ffffff;     // UART 中斷定義
    *pSIC_IAR2 = 0xfffFFffF;                    
    register_handler(ik_ivg10, UART_ISR);       // UART ISR -> IVG 10
    *pSIC_IMASK = 0x00000080;
}

int Test_TX(char *buf,int len)
{
    int i;          
    for(i=0;i<len;i++)          //發送測試函數,將生成的數據透過IR發送出去
    {  
        *pUART0_THR=buf[i];
         while(!(*pUART0_LSR&0x0020));
    }
    return i;
}

int main()
{

   int out=11;

    Set_PLL(16,4);
    //波特率=100M/(16*X)
    UARTinit(651);  //9600波特率
    Init_Interrupts();
    while(1){
    Test_TX(out,14);

    }

}


「该帖子被 OpenADSP 在 2014-06-18 11:00:52 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/6/17 16:05:47
lvben5d(论坛新手)
lvben5d
头衔:社区公民
帮派:无帮无派
帖数:61
金钱:672
积分:89
注册时间:2014/3/24
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
老弟  我有串口 中断方式接收的源码  是否给你参考下? 一般在程序设计中,串口具备的 全双工发送和接收独立中断的优势就必须要保持下。  adi封装了便于我们开发的API. 不需要我们武装到牙齿的去操作寄存器,只需要操作函数。。

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/6/17 22:16:48
qwe90369(论坛新手)
qwe90369
头衔:社区公民
帮派:无帮无派
帖数:13
金钱:235
积分:21
注册时间:2013/10/29
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
TO:lvben5d
謝謝你的建議!
可以將源碼寄到我的信箱嗎?
E-mail:qwe90369@yahoo.com.tw
謝謝!!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/6/18 9:02:06
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
UART接收中断打开后,一旦有数据,就会进入中断中读取,直到数据标志位为空,跳出中断,你只需在中断中建一个大的buffer,就可以了。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/6/18 21:53:26
lvben5d(论坛新手)
lvben5d
头衔:社区公民
帮派:无帮无派
帖数:61
金钱:672
积分:89
注册时间:2014/3/24
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
加我qq  385157936  给你发源码。  andy前辈,你用的是非api方式?   我接手的这个源码,是用api库,设置好需要接收字节个数以及接收buffer,然后写回调函数。 个人感觉,串口这个接收 不如我们以前51 32那种用法简单。 API方式有点繁琐,不过比较规范。   还没仔细研究,有不妥之处,大家多多发表意见。    按照以前51 32的写法, 我们往往是接收完1个完整数据包后,就去进行校验包,然后处理。

「该帖子被 lvben5d 在 2014-06-19 15:56:21 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/6/19 15:49:42
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我们很少用API库。ADI自己的东西很是复杂。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/6/20 16:48:35
滑板鞋(论坛新手)
滑板鞋
头衔:社区公民
帮派:无帮无派
帖数:9
金钱:174
积分:12
注册时间:2014/11/9
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
UART RX的中断等级设置应该是SIC_IAR1的最高位里设3吧 这个好像设置到 SPI的中断等级了吧

一步两步似魔鬼的步伐
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/10 13:18:18
bkbxbsyjh(论坛新手)
bkbxbsyjh
头衔:社区公民
帮派:无帮无派
帖数:62
金钱:452
积分:64
注册时间:2014/7/1
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
api库在哪里下载呢

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/11 15:24:07
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你在帮助文件中搜索 Interrupt ,能找到每一个处理器相关的中断向量表,可以看到每个中断配置时
SIC_IARx 默认的值为多少,SPI相关的有,还不少,看你用哪个,这个值可以不配置,用默认的

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/11/12 22:11:45
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.160349 Call, 1 Queries, Processed in 0.031250 second(s),