PIC 18F46K22 SPI速度

时间:2015-03-31 16:40:57

标签: microcontroller frequency pic spi

我在SPI主模式下使用PIC 18F46K22与ADC芯片通信。 FOSC频率为64MHz(外部16MHz晶振,PLL开启),因此根据PIC手册,最大SPI速度应为FOSC / 4 = 16MHz。但是当我使用SPI发送8位数据时,需要大约1.6us才能发送。这意味着SPI速度仅为5MHz左右。我的编译器是用于PIC的MicroC PRO,我已经使用SPI库函数来通过SPI初始化和读取数据。有人可以帮我解决这个问题吗?

这是我初始化SPI1的方式:

SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_END, _SPI_CLK_IDLE_HIGH, _SPI_HIGH_2_LOW);

这些是通过SPI读取数据的代码行:

Take1 = SPI1_Read(0);  // MSB of ADC shift register
Take2 = SPI1_Read(0);
Take3 = SPI1_Read(0);  // LSB of ADC shift register

我使用外部晶体(HS振荡器)。我在"编辑项目"中做了相应的设置。 MikroC PRO sotfware部分(振荡器选择:HS振荡器(高功率> 16 MHz),4X PLL使能:启用)。

1 个答案:

答案 0 :(得分:1)

我建议你这个解决方案:

使用16MHz内部振荡器初始化PIC,并在MikroC Editor中启用4X PLL。 然后,将引脚RA6设置为CLOCKOUT,这将输出您的系统频率/ 4。 这意味着,如果您的64MHz初始化很好,您将在RA6上获得16MHz方波。

OSCCON = 0b01110010; //Enable 16MHz internal oscillator, running from INTOSC
OSCTUNE.PLLEN = 1;   //Enable PLL operation, 4x clock set from HFINTOSC

尝试阅读此位的状态:

OSCCON2.PLLRDY

如果设置为(1),那么您的时钟来自PLL。否则,它没有正确启用。