你好,经过测试发现了一些小问题,芯片是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>
复制代码
|