SPI奴隶驱动速度问题

2个帖子/ 0新
最后一篇
Zwang308.
离线
最后一次露面:4年5个月前
掌握
加入:2014-07-02 14:15
SPI奴隶驱动速度问题

嗨对话框,

我正在为DA14580开发一个SPI奴隶驱动程序,但是,我可以将其运行到250kHz。你们可以给我一些关于如何更快的建议吗?非常感谢。

init函数:

//初始化SPI模块
setBits16(SPI_CTRL_REG,SPI_ON,0);//关闭SPI模块,如果打开
setbits16(spi_ctrl_reg,spi_word,0);//设置为8位模式
setbits16(spi_ctrl_reg,spi_smn,0x01);//在从动模式下设置SPI
setBits16(SPI_CTRL_REG,SPI_POL,0x0);//模式3:SPI_POL = 0
setbits16(spi_ctrl_reg,spi_pha,0x0);//和spi_pha = 0
setbits16(spi_ctrl_reg,spi_mint,0x1);//使SPI可屏蔽中断到CPU
setbits16(spi_ctrl_reg1,spi_fifo_mode,0x00);//使能SPI RX和TX FIFO
setbits16(spi_ctrl_reg,spi_en_ctrl,1);//为从模式启用SPI en引脚
setbits16(spi_ctrl_reg,spi_on,1);//启用SPI模块

//配置SPI环境
nvic_clearpendingirq(spi_irqn);
nvic_setpriority(spi_irqn,0);
nvic_enableirq(spi_irqn);

在ISR:
void spi_handler(void)
{
静态UINT8_T数据;
//等到数据准备就绪
而(0xFF和GetBits16(SPI_CTRL_REG,SPI_INT_BIT)== 1)
{
data = 0xff&getword16(spi_rx_tx_reg0);
while(getbits16(spi_ctrl_reg,spi_txh)== 1)||(getBits16(SPI_CTRL_REG1,SPI_BUSY)== 1));
setword16(SPI_RX_TX_REG0,0xFF和数据);
setword16(spi_clear_int_reg,0x01);
}

}

关键词:
设备:
mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
zwang308,

zwang308,

从机动模式下的580的SPI可以理解最多4MHz(从母版提供的时钟应该比580的内部SPI时钟慢4倍),问题是SPI的采样器非常敏感小尖峰和反射并错误地认为噪音作为脉冲。它不是代码的问题(你可以看一下SPI_hci.c文件中的SPI从代码 - SPI_HCI_SLAVE_INIT())。

一些提示,以便从580行为作为SPI Slave的580正常时钟数据:

1)将580连接到外部微观的线缆应适当地终止,并且可能屏蔽携带时钟电缆的电线。

2)两个模块之间的适当接地。

谢谢mt_dialog.