打印
[MCU]

SCI配置问题

[复制链接]
422|20
手机看帖
扫描二维码
随时随地手机跟帖
沙发
yufe| | 2020-11-16 23:41 | 只看该作者
没看手册吗

使用特权

评论回复
板凳
liliang9554|  楼主 | 2020-11-16 23:45 | 只看该作者
不发数据的时候,Sci_sendTimer1的值不停的在变,加断点也发现不停的在调用发中断函数。这个实在太奇怪了。。

使用特权

评论回复
地板
午夜粪车| | 2020-11-16 23:48 | 只看该作者
还有什么现象?

使用特权

评论回复
5
liliang9554|  楼主 | 2020-11-16 23:51 | 只看该作者
屏蔽掉SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1;  // Clear SCI Interrupt flag ,发中断函数完全不触发,我在while中发一次数据,也不会触发中断。

使用特权

评论回复
6
huangchui| | 2020-11-16 23:56 | 只看该作者
这行代码咋啦

使用特权

评论回复
7
liliang9554|  楼主 | 2020-11-17 20:01 | 只看该作者
        有这行代码,就不停的在触发发中断函数,实际没有发任何数据出来。

使用特权

评论回复
8
zhenykun| | 2020-11-17 20:07 | 只看该作者
FIFO中断呢‘

使用特权

评论回复
9
liliang9554|  楼主 | 2020-11-17 20:11 | 只看该作者
没问题

使用特权

评论回复
10
wyjie| | 2020-11-17 20:15 | 只看该作者
看看你的中断函数吧

使用特权

评论回复
11
liliang9554|  楼主 | 2020-11-17 20:18 | 只看该作者

interrupt void SCITXINTA_ISR(void)     // SCI-A
{
  // Insert ISR Code here
  Sci_sendTimer1++;

  SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1;  // Clear SCI Interrupt flag

  // To receive more interrupts from this PIE group, acknowledge this interrupt
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}

串口初始化函数:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Baud config 38400bps
  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;

  // FIFO configure enable FIFO
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.all = 0x0023;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}


这个是基于eeworld版主的例程上改的。
下面这个例子基于controlSUITE的例程
测试发现,例程:scia_loopback_interrupts
C:\ti\controlSUITE\development_kits\C2000_LaunchPad\f2802x_examples\scia_loopback_interrupts

关掉loopback模式后,发送中断函数还是不停在调用,这就很奇怪了??不发数据,为啥FIFO发中断会不停触发,大家可以试一下

修改代码:
void scia_init()

屏蔽掉//SCI_enableLoopBack(mySci);
或改成:SCI_disableLoopBack(mySci);

使用特权

评论回复
12
yszong| | 2020-11-17 20:21 | 只看该作者
发送没有必要在中断进行的。

使用特权

评论回复
13
liliang9554|  楼主 | 2020-11-17 20:30 | 只看该作者

现在测试发现:
关掉FIFO模式,只开通SCICTL2中
RX/BK INT ENA
TX INT ENA
中断,就不会触发,中断收发也是正常的

使用特权

评论回复
14
dengdc| | 2020-11-17 20:36 | 只看该作者
看来还是FIFO的配置问题

使用特权

评论回复
15
heweibig| | 2020-11-17 20:39 | 只看该作者

TMS320x2802x, 2803x Piccolo Serial Communications Interface (SCI) Reference Guide.pdf
寄存器SCIFFTX
5 TXFFIENA Transmit FIFO interrrupt enable
0 TX FIFO interrupt based on TXFFIVL match (less than or equal to) is disabled
1 TX FIFO interrupt based on TXFFIVL match (less than or equal to) is enabled.

而上面TXFFIVL,我设的是0。比如设计成485口,设成0一般用于关断485使能用。
所以,中断就会不停触发,不是因为发数据。
而Infineon的片子就只触发1次,这点设计比TI要好。
Infineon有点类似上升沿触发,TI就是高电平触发,导致TI会持续触发。

解决办法,要么TXFIVL不要设成0。
或者,发的时候使能FIFO发中断,发完或不发关闭FIFO发中断。
SciaRegs.SCIFFTX.bit.TXFFIENA = 1;
1使能,0关闭。

使用特权

评论回复
16
liliang9554|  楼主 | 2020-11-17 20:42 | 只看该作者
现在又碰到另外一个问题:
在【玩转C2000 LaunchPad】在FLASH里运行 ,这个帖子里,讲过。
下到Flash里面,收中断函数不工作了,FIFO发中断正常。
在RAM里面运行和Falsh debug下点运行后都正常。。

使用特权

评论回复
17
heweibig| | 2020-11-17 20:46 | 只看该作者
这个先要检查下总中断的,然后看个IO口对应的中断寄存器是否配置好的

使用特权

评论回复
18
午夜粪车| | 2020-11-17 20:52 | 只看该作者
怎么变的,有什么规律吗

使用特权

评论回复
19
zhaoxqi| | 2020-11-17 20:55 | 只看该作者
你使用的单步调试过了吗

使用特权

评论回复
20
shimx| | 2020-11-17 20:59 | 只看该作者
你可以使用字符串输出的,看看是哪个中断

使用特权

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

本版积分规则

950

主题

11568

帖子

6

粉丝