我试图让 SPI 在 PIC32MX250F128D 上工作,但运气不佳。
我尝试了 8 位模式和 32 位模式,但我没有得到所有数据或根本没有数据。
我正在尝试使用 4MHz SPI 来驱动 WS2812 ledstrip。
这是我的代码:
#include <xc.h>
#include <peripheral/system.h>
#include "config.h"
void settings( void );
char Send_SPI(unsigned char);
int main( void ) {
int i, j;
unsigned char scrapdata;
unsigned char buffer[6] = {0x12, 0x34, 0x56, 0x78, 0x90, 0x01};
settings();
while(1) {
Send_SPI(buffer[j]);
j = (j > 4)? 0 : j++;
for(i = 0; i < 300; i++);
}
return 0;
}
void settings( void ) {
SYSTEMConfigPerformance(SYS_FREQ);
TRISB &= 0xFFFB;
RPB2R = 0x3;
SPI1STAT = 0;
SPI1CON = 0;
unsigned int rData = SPI1BUF;
// => 4MHz = 48MHz / (2 * (5 + 1))
SPI1BRG = 5;
SPI1STATCLR = 0x40; // clear the Overflow
SPI1CON = 0x00008230;
}
char Send_SPI(unsigned char buffer) {
//while(!(SPI1STAT & 0x2));
SPI1BUF = buffer;
while(!(SPI1STAT & 0x1)); // wait transfer complete
char scrapdata = SPI1BUF; //read to clear SPI2BUF before reload
return scrapdata;
}
目前没有任何东西从控制器中流出。你们中有人知道出了什么问题吗?
劳伦斯