嗨对话框,
我正在为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);
}
}
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.