1. 硬件上,底板有2个串口,UART1和UART2(使用了MAX3232电平转换芯片),其中UART2也可以转RS485的。

2. 看下数据手册部分,不过一直不理解过采样的意思,16字节的FIFO

Three Configurable 16550-Type UART Modules:
–with Modem Control Signals
–-Byte FIFO
–16xor13x Oversampling Option

3. 本次的例程是中断机制,DSP6748的中断系统是什么样的?在DSP是通过中断向量表作为相应的中断服务程序的入口,中断优先级自高至低。在TMS320C6748中共有16个,前4个中断,编程一般用不到,TI公司总共留给用户12个可自定义的中断,如下图

中断优先级

中断名称
描述
0
Reset
复位中断
1
NMI
不可屏蔽中断
2
Reserved
预留(不可操作)
3
Reserved
预留(不可操作)
4
INT4
用户自定义中断
5
INT5
用户自定义中断
6
INT6
用户自定义中断
7~13
INT7~13
用户自定义中断
14
INT14
用户自定义中断
15
INT15
用户自定义中断
外部的中断事件有128个,如下图(省略了一部分)
需要把用到的中断事件分配到12个可用的中断。
但是外部有128个中断事件,而CPU只留了12个用户中断,完全不够分啊,所以当使用到的中断特别多的情况下,复用中断事件有非常重要的意义。这个时候有一个中断组合器,中断组合器就是把几个中断事件合并成一个,从下图可以看出,只能中断事件4-127合并到0-3里面。当然这是在中断事件特别多的情况下,假如你只有2-3个中断事件,可以不使用中断组合器。中断组合器在上图的Interrupt selector里面。

4. 看下代码部分,使能模块

void PSCInit(void)
{
// 对相应外设模块的使能也可以在 BootLoader 中完成
// 使能 UART2 模块
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART2, PSC_POWERDOMAIN_ALWAYS_ON,PSC_MDCTL_NEXT_ENABLE);
}

串口配置

void UARTInit(void)
{
// 配置 UART20 参数
// 波特率 115200 数据位 8 停止位 1 无校验位
UARTConfigSetExpClk(SOC_UART_2_REGS, UART_2_FREQ, BAUD_115200,UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
// 使能 UART2
UARTEnable(SOC_UART_2_REGS);
// 使能接收 / 发送 FIFO
UARTFIFOEnable(SOC_UART_2_REGS);
// 设置 FIFO 级别
UARTFIFOLevelSet(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1);
}

串口中断配置

void UARTInterruptInit(void)
{
IntRegister(C674X_MASK_INT4, UARTIsr);
IntEventMap(C674X_MASK_INT4, SYS_INT_UART2_INT);
IntEnable(C674X_MASK_INT4);
// 使能中断
unsigned int intFlags = 0;
intFlags |= (UART_INT_LINE_STAT | \
UART_INT_TX_EMPTY | \
UART_INT_RXDATA_CTI);
UARTIntEnable(SOC_UART_2_REGS, intFlags);
}

中断的C674X_MASK_INT4是什么意思?这个中断4就是上面说的CPU留了12个用户中断的其中之一。

#define C674X_MASK_INT4 4
#define C674X_MASK_INT5 5
#define C674X_MASK_INT6 6
#define C674X_MASK_INT7 7
#define C674X_MASK_INT8 8
#define C674X_MASK_INT9 9
#define C674X_MASK_INT10 10
#define C674X_MASK_INT11 11
#define C674X_MASK_INT12 12
#define C674X_MASK_INT13 13
#define C674X_MASK_INT14 14
#define C674X_MASK_INT15 15

中断服务函数ISR

void UARTIsr()
{
static unsigned int length = sizeof(txArray);
static unsigned int count = 0;
unsigned char rxData = 0;
unsigned int int_id = 0;
// 确定中断源
int_id = UARTIntStatus(SOC_UART_2_REGS);
// 清除 UART2 系统中断
IntEventClear(SYS_INT_UART2_INT);
// 发送中断
if(UART_INTID_TX_EMPTY == int_id)
{
if(0 < length)
{
// 写一个字节到 THR
UARTCharPutNonBlocking(SOC_UART_2_REGS, txArray[count]);
length--;
count++;
}
if(0 == length)
{
// 禁用发送中断
UARTIntDisable(SOC_UART_2_REGS, UART_INT_TX_EMPTY);
}
}
// 接收中断
if(UART_INTID_RX_DATA == int_id)
{
rxData = UARTCharGetNonBlocking(SOC_UART_2_REGS);
UARTCharPutNonBlocking(SOC_UART_2_REGS, rxData);
}
// 接收错误
if(UART_INTID_RX_LINE_STAT == int_id)
{
while(UARTRxErrorGet(SOC_UART_2_REGS))
{
// 从 RBR 读一个字节
UARTCharGetNonBlocking(SOC_UART_2_REGS);
}
}
return;
}

代码主要是这4部分组成的。

5. 程序运行测试一下,编译的时候点下工程才能编译,连接目标开发板,下载UART2_INT.out文件,点击运行,打开串口终端,发现串口不通,开始查找原因
6. 实际测试发现,TMS320C6748有2个PSC的时钟域(power and sleep control电源和时钟控制),UART0是在PSC0,UART1和UART2是在PSC1,刚开始用错了PSC,修改之后搞定。
 
 
 

创龙TMS320C6748开发板串口和中断学习笔记的更多相关文章

  1. 转:【创龙TMS320C6748开发板试用】相关软件的安装与基本设置+CCS安装失败分析

    http://bbs.elecfans.com/jishu_542000_1_1.html

  2. 创龙DSP6748开发板上电测试-第一篇

    1. 创龙DSP6748开发板测试.2980元的售价很高,我估计新的1200元比较合适,当然创龙定价是按照供需关系的.仿真器XDS100V2卖598元,真是狮子大张口. 2. 上电是5V-2A的电源. ...

  3. 创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇

    1. 作为1个456MHz的处理器,不跑个操作系统说不过去,直接打开工程\Demo\SYSBIOS\Application\GPIO_LED,主函数比较简单 // 创建任务 Task_create(t ...

  4. 创龙OMAPL138开发板测试(1)

    1. 里面的DSP内核是否能单独使用?先测试一个LED灯的例程先,仿真器连接上开发板,显示有C6748和PRU还有ARM9.对了,板子的拨码开关要01111,是DEBUG模式才可以. 2. 下载一下. ...

  5. 创龙DSP6748开发板LED闪烁-第一篇

    1. 首先看下DSP6748的GPIO寄存器的文档,先看下框图,有这个框图,一目了然,输入和输出很清楚 2. 看下寄存器部分,对应上面的图,问题在于,DSP6748有多少个GPIO?最多144个,下一 ...

  6. 创龙6748开发板加载.out出现a data verification error occurred, file load failed

    1. 需要提前添加GEL文件 2. 找到GEL文件路径 3. 然后再加载.out文件

  7. 创龙DSP6748开发板驱动LCD屏

    1. DSP6748内部有2个LCD控制器,Raster Controller 光栅控制器和the LCD Interface Display Driver (LIDD) controller 控制器 ...

  8. 创龙TMS320C6748开发找不到 tl.dsp.evm6748的问题研究

    1. 使用中遇到问题,看了一下帖子说是把tl.dsp.evm6748换成ti.platforms.evm6748可以编译过去.这个包是在XDCtools里面的. js: "D:/ti/ccs ...

  9. 优龙FS2410开发板学习过程遇到问题总结

    以下的问题及其解决办法是基于优龙FS2410开发板,不定期更新 ============================================================= 开发学习环境 ...

随机推荐

  1. 20150103 海南铁汉vs哈尔滨毅腾

    本文首发于『懂球帝』 这一场球赛虽然极其普通,在各位懂球帝面前或许不值得一提,但它极具历史意义,因为这是海南第一个职业联赛队伍的首场正式比赛,同时也是海南铁汉队第一次在正式比赛中与球迷们见面. 稍做一 ...

  2. Git 还没push 前可以做的事(转)

    Git 版本控制系統(3) 還沒 push 前可以做的事 转载:http://ihower.tw/blog/archives/2622   這一集要講的是:還沒 push 前可以做的壞事,也就是 re ...

  3. C语言 变量类型

    // a是一个全局变量,静态变量 int a; void test() { // b是一个局部变量,自动变量 ; b++; // c是一个局部变量,静态变量 ; c++; printf("b ...

  4. MySQL:数据库入门篇3

    1.sql语句逻辑执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_t ...

  5. ACM-ICPC (10/12)

    01分数规划 背景:根据楼教主回忆,曾经在一场比赛中秒掉了一道最优比例生成树问题,导致很多人跟风失败,最终悲剧. 什么是01分数规划呢? 这样的等式求最大,最小即为01分数规划.  如果你不知道该如何 ...

  6. Uva 4394 字符串刷子

    题目链接:https://vjudge.net/contest/164840#problem/A 题意:一个字符串刷子,每次可以将一段连续的字符串变成一种颜色,给两个字符串,最少通过几次可以将第一个字 ...

  7. LA 4256 商人

    题目链接:https://vjudge.net/contest/160916#problem/B 题意:给一个无向图,和一个序列:要求,在这个序列中,两两相连的两个数相同,或者,在无向图中相邻:(n& ...

  8. PHP语言开发微信公众平台(订阅号)之注册(1)

    1.百度搜索"微信公众平台" 2.选择微信公众平台官网并单击打开 3.进入官网页面,单击 "立即注册" 进入注册页面 4.进入注册页面,单击订阅号 5.进入订阅 ...

  9. 2018.12.14 Mac的Matlab2018a软件及其安装步骤

    软件百度云链接:https://pan.baidu.com/s/1q3EO5up-1YuAQ4gEi7sTwQ 密码:p6mf MATLAB R2018a for Mac破解说明 1.MATLAB R ...

  10. 使用MVCPager做AJAX分页所走的弯路

    使用MVCPager做AJAX分页所需要注意的地方: 1.版本问题,推荐使用2.0以上,对ajax支持才比较的好了 2.当需要使用页索引输入或下拉框以及使用Ajax分页模式时,必须用Html.Regi ...