我在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使能:启用)。
答案 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。否则,它没有正确启用。