打印

DSP6747发送中断如何操作

[复制链接]
2700|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eagle200203|  楼主 | 2014-2-28 12:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前一直用的6713外扩的752B,FIFO有64字节,只用到了接收中断,发送数据直接用FIFO了,没有用过中断。
现在6747只有16字节FIFO,估计以前的办法是无效了,正在研究6747发送中断,高手们多指点啊!
问题一:
发送中断的原理是怎样的?
我的理解是建立一个数据缓存区,向这个缓冲区里面丢要发送的数据,如果FIFO设置成8个,是每发送8个数据就进入中断?中断服务程序就将这个缓冲区里面的数据写到THR吗,这时候写入THR数据的个数有没有限制什么的?
还有初始的发送中断如何产生?比如要发10个字节,初始的发送数据个数是不是就只能写8,当产生了数据发送中断以后再把后面的2个字节发送出去吗?
问题二:(和FIFO无关哈)
开发板上用了I2C0,我看datasheet它的SCK是AUXPLL,那就是输入晶振啊,开发板上是24M,但是I2C程序的配置分频配的是3,也就是说把AUXPLL做了4分频是吧,应该是6M,但是代码后面的解释是12M,不懂了,求高手解释啊!

相关帖子

沙发
zhangmangui| | 2014-2-28 15:33 | 只看该作者
帮你咨询一下   

使用特权

评论回复
板凳
eagle200203|  楼主 | 2014-3-3 12:06 | 只看该作者
哎,大神们怎么都还没有回答啊,先说一下我的调试的情况哈:
用了串口发送中断之后,好像发送一个数据就进一次中断?我用了FIFO,深度设置的是8字节,前面的串口接收中断经测试都是八个字节才产生一个中断啊,所以感觉这不科学啊!如果是一个发送数据就进一个中断的话,FIFO不是成了摆设,只能用于接收吗?
中断这么频繁不是就降低主程序的效率吗。
大家调试的是什么情况呢?有没有大神分享一下?:lol
另外还有奇怪的一点,在中断里面读取IIR寄存器,只有C1(无中断),C2(发送中断),C4(接收中断),CC(超时中断)这几个状态,没有检测到其他的中断源,比如:接收线状态寄存器之类的啊,(这个中断我是开了的,IER=7),要在什么情况下才会产生这个中断呢?

使用特权

评论回复
地板
zhangmangui| | 2014-3-3 22:18 | 只看该作者
eagle200203 发表于 2014-3-3 12:06
哎,大神们怎么都还没有回答啊,先说一下我的调试的情况哈:
用了串口发送中断之后,好像发送一个数据就进 ...

没有调试过  看到有人说:
没有通过PSC将UART模块使能吧。

使用特权

评论回复
5
zhangmangui| | 2014-3-3 22:27 | 只看该作者
收集到的  不知道能不能帮到你

如果你不确定uart的中断处理的流程的话,建议下载starterware,可参靠OMAPL138的starterware中的uart例子

以下为设置uart2的流程:

   /* Enabling the PSC for UART2.*/

   PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART2, PSC_POWERDOMAIN_ALWAYS_ON,

    PSC_MDCTL_NEXT_ENABLE);

   /* Setup PINMUX */

   UARTPinMuxSetup(2, FALSE);

   /* Enabling the transmitter and receiver*/

   UARTEnable(SOC_UART_2_REGS);

   /* 1 stopbit, 8-bit character, no parity */

   config = UART_WORDL_8BITS;

   /* Configuring the UART parameters*/

   UARTConfigSetExpClk(SOC_UART_2_REGS, SOC_UART_2_MODULE_FREQ,

                       BAUD_115200, config,

                       UART_OVER_SAMP_RATE_16);

   /* Enabling the FIFO and flushing the Tx and Rx FIFOs.*/

   UARTFIFOEnable(SOC_UART_2_REGS);

   /* Setting the UART Receiver Trigger Level*/

   UARTFIFOLevelSet(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1);

   /*

   ** Enable AINTC to handle interrupts. Also enable IRQ interrupt in ARM

   ** processor.

   */

   SetupInt();

   /* Configure AINTC to receive and handle UART interrupts. */

   ConfigureIntUART();

   /* Preparing the 'intFlags' variable to be passed as an argument.*/

   intFlags |= (UART_INT_LINE_STAT  |  \

                UART_INT_TX_EMPTY |    \

                UART_INT_RXDATA_CTI);

   /* Enable the Interrupts in UART.*/

   UARTIntEnable(SOC_UART_2_REGS, intFlags);

   while(1);

使用特权

评论回复
6
chenci2013| | 2014-3-4 00:09 | 只看该作者
应该在中断执行发送程序吧

使用特权

评论回复
7
chenci2013| | 2014-3-4 00:09 | 只看该作者
跟fifo差不多的

使用特权

评论回复
8
chenci2013| | 2014-3-4 00:10 | 只看该作者

使用特权

评论回复
9
eagle200203|  楼主 | 2014-3-4 16:38 | 只看该作者
chenci2013 发表于 2014-3-4 00:09
应该在中断执行发送程序吧

是滴,在中断中发送程序,但是发送了一个数据就又进发送中断了,不是应该到了设置的深度后再进吗?

使用特权

评论回复
10
eagle200203|  楼主 | 2014-3-4 16:50 | 只看该作者
chenci2013 发表于 2014-3-4 00:09
应该在中断执行发送程序吧

嗯,这个,没主程序有发送数据,也就是没有触发发送数据这个中断源怎么能进串口发送中断呢?
不知道我的理解对不对,我以为至少不管哪个地方至少有一个数据发送才会进发送中断,然后再在发送中断里面继续发送数据,是这样的吧?
我的中断服务程序发送中断在进行数据发送,但是如果在主程序中或者其他程序中没有数据发送的指令,是进不了发送中断的啊,至少我的情况是这样滴,呵呵,还是我的理解错误了?有什么另外的办法呢?

使用特权

评论回复
11
eagle200203|  楼主 | 2014-3-4 16:53 | 只看该作者
zhangmangui 发表于 2014-3-3 22:27
收集到的  不知道能不能帮到你

如果你不确定uart的中断处理的流程的话,建议下载starterware,可参靠OMAPL ...

亲,这种方法没有见过,更没有用过,我一直以为PSC就控制一下电源呢,对于我来说这个是高大上的节奏啊,小女子估计搞不懂,谢谢哈

使用特权

评论回复
12
zhangmangui| | 2014-3-4 17:31 | 只看该作者
eagle200203 发表于 2014-3-4 16:53
亲,这种方法没有见过,更没有用过,我一直以为PSC就控制一下电源呢,对于我来说这个是高大上的节奏啊, ...

小硕  小女子啊   
欢迎欢迎~~

使用特权

评论回复
13
eagle200203|  楼主 | 2014-3-4 22:42 | 只看该作者
zhangmangui 发表于 2014-3-4 17:31
小硕  小女子啊   
欢迎欢迎~~

既然都提到了PSC,弱弱的问一下,PSC是管理片上设备的电源的寄存器吗?6713里面貌似没有这个东西,这个还有什么其他的作用,像你说的还可以用作串口数据发送,这个功能也太穿越了吧,呵呵。
还有想请教一下,如果要让系统在一段时间内处于休眠或者待机状态,应该如何操作呢(就是6747)?就用这个PSC可以吗?因为项目忙,我还来不及细看这个PSC是干嘛的。根据字面意思好像有点接近这个功能呢。
哎,搞这个就是头痛啊!

使用特权

评论回复
14
chenci2013| | 2014-3-4 23:10 | 只看该作者
eagle200203 发表于 2014-3-4 16:50
嗯,这个,没主程序有发送数据,也就是没有触发发送数据这个中断源怎么能进串口发送中断呢?
不知道我的 ...

发送中断是发送一个数据触发中断的

使用特权

评论回复
15
chenci2013| | 2014-3-4 23:10 | 只看该作者
具体原理你可以参考一下stm32的 它的原理很明确的

使用特权

评论回复
16
zhangjin_comeon| | 2014-3-5 00:04 | 只看该作者
eagle200203 发表于 2014-3-4 22:42
既然都提到了PSC,弱弱的问一下,PSC是管理片上设备的电源的寄存器吗?6713里面貌似没有这个东西,这个还 ...

没用过   帮忙顶

使用特权

评论回复
17
zhangmangui| | 2014-3-5 00:07 | 只看该作者
eagle200203 发表于 2014-3-4 22:42
既然都提到了PSC,弱弱的问一下,PSC是管理片上设备的电源的寄存器吗?6713里面貌似没有这个东西,这个还 ...

没有用过这款   资料都是帮你找的
看看这个链接中的吧
http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/t/45471.aspx

使用特权

评论回复
18
bitmydream| | 2014-3-5 10:04 | 只看该作者
触发深度是8比特   发送fifo少于8比特才会进入中断    此时可以继续向发送fifo中写发送数据   接收中断的话正好相反

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

67

帖子

1

粉丝