TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6678: 在C6678平台下如何实现SPI驱动功能。

Part Number:TMS320C6678

在裸核开发下,在pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\src的evmc66x_spi.c代码中:

SPI的初始化中:

SPI_STATUSspi_claim
(
uint32_t cs,
uint32_t freq
)

{

/* setup format */
scalar = ((SPI_MODULE_CLK / freq) – 1 ) & 0xFF;

if ( cs == 0) {
SPI_SPIFMT0 = (8 << CSL_SPI_SPIFMT_CHARLEN_SHIFT) |
(scalar << CSL_SPI_SPIFMT_PRESCALE_SHIFT) |
(CSL_SPI_SPIFMT_PHASE_DELAY << CSL_SPI_SPIFMT_PHASE_SHIFT) |
(CSL_SPI_SPIFMT_POLARITY_LOW << CSL_SPI_SPIFMT_POLARITY_SHIFT) |
(CSL_SPI_SPIFMT_SHIFTDIR_MSB << CSL_SPI_SPIFMT_SHIFTDIR_SHIFT);
}else if ( cs == 1) {
SPI_SPIFMT0 = (16 << CSL_SPI_SPIFMT_CHARLEN_SHIFT) |
(scalar << CSL_SPI_SPIFMT_PRESCALE_SHIFT) |
(CSL_SPI_SPIFMT_PHASE_NO_DELAY << CSL_SPI_SPIFMT_PHASE_SHIFT) |
(CSL_SPI_SPIFMT_POLARITY_LOW << CSL_SPI_SPIFMT_POLARITY_SHIFT) |
(CSL_SPI_SPIFMT_SHIFTDIR_MSB << CSL_SPI_SPIFMT_SHIFTDIR_SHIFT);
}

}

在SPI SPI_SPIFMT寄存器中计算

文章理解是:

Maximum SPI clock frequency =  166666666 / ( 0 + 1) —– > with the prescale value as 0

                                                    = 166 MHz 

Minimum SPI clock frequency =  166666666 / ( 255 + 1) —> with the pre-scale value as 255 

                                                    =  651041 Hz –> ~ 660000 Hz 

代码scalar = ((SPI_MODULE_CLK / freq) – 1 ) & 0xFF;

为何要取& 0xFF? 例如我要设置SPI freq设置为48M控制始终,最后计算scalar 是143:

166666666/(143+1)=115740=1.1M  最后SPI的CLK输出1.1M时钟吗?

按照scalar = ((SPI_MODULE_CLK / freq) – 1 ) & 0xFF后代码 LOG:

[C66xx_0] SPI_init: SPI spi_iclk= 166666666SPI_init: SPI spi_iclk= 48000SPI_init: SPI PRESCALE= 143SPI_init: spiRegs->SPIFMT[0]= 18f08

SPI_init: SPI spi_iclk= 166666666SPI_init: SPI spi_iclk= 48000SPI_init: SPI PRESCALE= 3471SPI_init: SPI PRESCALE1= 143SPI_init: spiRegs->SPIFMT[0]= 18f08

Shine:

XING CUI 说:

代码scalar = ((SPI_MODULE_CLK / freq) – 1 ) & 0xFF;

为何要取& 0xFF?

这个应该是取低8bit, PRESCALE的取值范围是0~FF。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 在C6678平台下如何实现SPI驱动功能。
分享到: 更多 (0)