STC32F技术手册笔误 20240202版本|有关超时寄存器
本帖最后由 王昱顺 于 2024-3-5 10:45 编辑备注:32G手册也是有这个问题的
第589页
I2C部分也有同样的错误
第615页
本帖最后由 王昱顺 于 2024-3-3 16:37 编辑
顺便问一下这个
测试多种方法都无法进入超时中断,直接判断标志位也没发现超时中断标志位置1.
请问有没有关于SPI超时中断的测试程序学习一下?
楼主很细心,发现笔误了{:4_250:} 王昱顺 发表于 2024-3-3 16:07
顺便问一下这个
附件是STC32F做SPI从机使能超时中断的例子,供参考:
乘风飞扬 发表于 2024-3-3 18:57
附件是STC32F做SPI从机使能超时中断的例子,供参考:
好的非常感谢 乘风飞扬 发表于 2024-3-3 18:57
附件是STC32F做SPI从机使能超时中断的例子,供参考:
你好,经过测试发现了一些小问题,芯片是STC32F12K54 固件版本号7.4.6U
这部分是SPI的初始化代码,现在出现的问题是。如果上电后不做任何动作,正常开始发数据以后就不会进入超时中断
如果拔掉SCLK信号线,则可以进入超时中断,重新插回去如果时机得当,则会开始正常的触发超时中断。
设置的是CPLO=0;CPHA=1;SCLK不动作为低电平。看示波器里面的数据应该是没有问题的。
为什么超时计时不生效呢?
<font size="5">void SPI_Init(void)
{
P_SW2 |= 0x80; // 扩展寄存器(XFR)访问使能
SPSTAT = 0xc0; // 清除标志位
SPCTL = 0xe7; // 忽略SS引脚功能,使能SPI功能,LSB优先,主机模式,下降沿采样数据,速率/4=52/4=13Mhz
ESPI = 1; // 关闭SPI中断功能
SPDAT = 0xaa; // 设置回复的第一个字节
DMA_SPI_STA = 0x00; // 清零DMA标志位
DMA_SPI_CFG2 = 0x03; // 不自动控制SS,SS引脚为P3.5
DMA_SPI_CFG = 0xab; // 使能SPI_DMA中断,禁止发送,允许接收。中断优先级3,总线访问优先3
DMA_SPI_CR = 0x81; // 允许SPI_DMA功能,开始操作前清空FIFO
DMA_SPI_RXAH = (u8)((u16)&show_test >> 8); // SPI发送数据存储地址
DMA_SPI_RXAL = (u8)((u16)&show_test);
DMA_SPI_AMT = 0xff;
DMA_SPI_AMTH = 0xff; // 拉满接收大小
HSSPI_CFG2 |= 0x28;// 启动高速SPI模式,打开FIFO
SPITOCR = 0x00; // 关闭超时中断
SPITOTH = 0x13;
SPITOTL = 0x88;
IAP_TPS = 52;
HSCLKDIV = 0x00; //高速时钟1分频,默认2分频
}</font>
王昱顺 发表于 2024-3-5 08:33
你好,经过测试发现了一些小问题,芯片是STC32F12K54 固件版本号7.4.6U
现有超时中断产生条件有2个:
1. 收满一个字节(8位数据)
2. 超时时间内没有收到新的数据
判断一下这两个条件能不能都满足,建议先直接使用前面提供的例程测试,正常后再进行修改或移植。 看的太仔细了,赞 乘风飞扬 发表于 2024-3-5 09:34
现有超时中断产生条件有2个:
1. 收满一个字节(8位数据)
2. 超时时间内没有收到新的数据
那有可能是数据漏了一位(整体偏移)导致的等待8位数据收满卡死。
我再仔细检查一下数据的波形,谢谢。
程序就是使用的例程进行移植 本帖最后由 王昱顺 于 2024-3-5 10:44 编辑
乘风飞扬 发表于 2024-3-5 09:34
现有超时中断产生条件有2个:
1. 收满一个字节(8位数据)
2. 超时时间内没有收到新的数据
谢谢,已经成功实现超时功能了。
问题存在是刚刚启动SPI设备的时候会有随机的几个脉冲。会造成SPI数据错位。
解决办法是初始化的时候通过预置SPI引脚电平为0后,打开普通上拉模式,强制给各个端口拉低到0。此时杂乱数据没法被读入。等通过SCCB配置完设备,启动了SPI_DMA开始读取后,再恢复SPI引脚为高阻模式,开始读取数据。此时的数据就没有错位了,而且超时功能也可以正常使用
建议把这些判断条件也写入到手册里面的超时部分,这样方便出现问题的时候进行排查
页:
[1]
2