1. SPI模式
SSP1STATbits.CKE = 0; //CKE=0, 时钟由空闲变为有效时发送 SSP1CON1bits.CKP = 1; // CKP=1, 空闲时高电平 // CKP=0, 空闲时低电平
SSP1STATbits.SMP = 0; //SMP=0, 在数据输出时间的中间采样 SSP1STATbits.CKE = 0; //CKE=0, 时钟由空闲变为有效时发送
SSP1CON1bits.CKP = 1; // CKP=1, SCK空闲时高电平 // CKP=0, SCK空闲时低电平
2. GT21L16S2W资料
3. 实际演示代码
void SPI_Init(void){ // Set the SPI1 module to the options selected in the User Interface // SMP Middle; CKE Idle to Active; SSP1STAT = 0x00; // SSPEN enabled; WCOL no_collision; CKP Idle:High, Active:Low; SSPM FOSC/64; SSPOV no_overflow; SSP1CON1 = 0x32; // SSP1ADD 0; SSP1ADD = 0x00; }void SPI_Write(uint8_t data){
SSP1CON1bits.WCOL = 0; PIR1bits.SSP1IF = 0; SSP1BUF = data; while(!PIR1bits.SSP1IF ); PIR1bits.SSP1IF = 0;
}uint8_t SPI_Read( void ){ SSP1CON1bits.WCOL = 0; PIR1bits.SSP1IF = 0; SSP1BUF = 0x00; // 初始化SPI总线读写周期 while ( !PIR1bits.SSP1IF ); // 等待接收完成 PIR1bits.SSP1IF = 0; return ( SSP1BUF ); }