创龙TMS320C6748开发板串口和中断学习笔记
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
|
用户自定义中断
|
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部分组成的。
创龙TMS320C6748开发板串口和中断学习笔记的更多相关文章
- 转:【创龙TMS320C6748开发板试用】相关软件的安装与基本设置+CCS安装失败分析
http://bbs.elecfans.com/jishu_542000_1_1.html
- 创龙DSP6748开发板上电测试-第一篇
1. 创龙DSP6748开发板测试.2980元的售价很高,我估计新的1200元比较合适,当然创龙定价是按照供需关系的.仿真器XDS100V2卖598元,真是狮子大张口. 2. 上电是5V-2A的电源. ...
- 创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇
1. 作为1个456MHz的处理器,不跑个操作系统说不过去,直接打开工程\Demo\SYSBIOS\Application\GPIO_LED,主函数比较简单 // 创建任务 Task_create(t ...
- 创龙OMAPL138开发板测试(1)
1. 里面的DSP内核是否能单独使用?先测试一个LED灯的例程先,仿真器连接上开发板,显示有C6748和PRU还有ARM9.对了,板子的拨码开关要01111,是DEBUG模式才可以. 2. 下载一下. ...
- 创龙DSP6748开发板LED闪烁-第一篇
1. 首先看下DSP6748的GPIO寄存器的文档,先看下框图,有这个框图,一目了然,输入和输出很清楚 2. 看下寄存器部分,对应上面的图,问题在于,DSP6748有多少个GPIO?最多144个,下一 ...
- 创龙6748开发板加载.out出现a data verification error occurred, file load failed
1. 需要提前添加GEL文件 2. 找到GEL文件路径 3. 然后再加载.out文件
- 创龙DSP6748开发板驱动LCD屏
1. DSP6748内部有2个LCD控制器,Raster Controller 光栅控制器和the LCD Interface Display Driver (LIDD) controller 控制器 ...
- 创龙TMS320C6748开发找不到 tl.dsp.evm6748的问题研究
1. 使用中遇到问题,看了一下帖子说是把tl.dsp.evm6748换成ti.platforms.evm6748可以编译过去.这个包是在XDCtools里面的. js: "D:/ti/ccs ...
- 优龙FS2410开发板学习过程遇到问题总结
以下的问题及其解决办法是基于优龙FS2410开发板,不定期更新 ============================================================= 开发学习环境 ...
随机推荐
- escape,unescape与encodeURIComponent,decodeURIComponent
escape:将string转成unicode字符串 escape('
- SQLServer用存储过程实现插入更新数据
实现 1)有同样的数据,直接返回(返回值:0): 2)有主键同样,可是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create pr ...
- Uva 11922 Splay
Splay(伸展树)实现可分裂与合并的序列 对于BST,除了Treap树之外,还有一种Splay的伸展树,他能快速的分裂与合并. 重要的操作是伸展操作,将一个指定的结点 x 旋转到根的过程. 分三种情 ...
- netbackup 8.1安装前注意事项
一.NetBackup 主服务器的 Web 服务器用户/组设置步骤 文章 ID:100034818 上次发布时间:2017-08-24 产品:NetBackup 问题 从 NetBackup 8. ...
- oracle 基础知识(四)常用函数
SQL中的单记录函数 .ASCII 返回与指定的字符对应的十进制数; SQL') zero,ascii(' ') space from dual; A A ZERO SPACE --------- - ...
- AngularJS表格排序
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- JavaScript创建对象的三种方法
在 JavaScript 中我们知道无法通过类来创建对象,那么如何创建对象呢? (1)通过“字面量”方式创建对象 将你的信息写到{ }中,并赋值给一个变量,此时这个变量就是一个对象,例: var ga ...
- spring(二)-反射、动态代理
主要是对上一篇文章中涉及到的点做补充,欢迎指正! 1. java反射知识-Spring IOC 依赖注入 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个 ...
- 【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
上周三面试题有两道涉及Oracle的分页查询,没有意外地凉了,现在总结一下. · Mysql mysql的分页可以直接使用关键字limit,句子写起来比较方便. 语法: ① limit m,n -- ...
- iOS开发之widget实现
前言 iOS extension的出现,方便了用户查看应用的服务,比如用户可以在Today的widgets中查看应用的简略信息,然后点击进入相关的应用界面.暂且不表网络上现有的widget文章 ...