/*************************************************** * SPI Testing program * * ************************************************/ #include #include "EESD.h" #pragma DATA _CONFIG1H, _OSC_HS_1H //10 mhz #pragma DATA _CONFIG2H, _WDT_OFF_2H #pragma DATA _CONFIG4L, _LVP_OFF_4L #pragma DATA _CONFIG3H, _MCLRE_ON_3H #pragma CLOCK_FREQ 10000000 volatile bit mssp@PIR1.3; // interrupt flag MSSP, trans/recp complete void SPI_init(void) { // Initialize SPI interface //////////////// // INTCON bits enable interrupts intcon.7 = 1; intcon.6 = 1; // PIE1.3 enables MSSP interrupts pie1.3 = 1; // IPR1.3 sets high priority inter //ipr1.3 = 1; // SSPCON1 control register for SPI mode sspcon1.5 = 1; // SSPEN sspcon1.4 = 0; // CKP sspcon1.3 = 0; // SSPM (3:0) sspcon1.2 = 0; sspcon1.1 = 1; sspcon1.0 = 0; // SSPSTAT status register for SPI mode sspstat.7 = 1; // NOT SURE sspstat.6 = 1; // CKE // trisc ? ask Schafer about I/O trisc.5 = 0; // SDO, serial data out trisc.3 = 0; // SCK, serial clock trisc.4 = 1; // SDI?????? contradicting datasheet and diagram trisd.0 = 1; // Reset trisd.1 = 1; // Voltage regulator trisd.2 = 1; // CSn (chip select) // FIFOs and the rest trisb.1 = 1; // FIFO trisb.0 = 1; // FIFOP trisb.2 = 1; // CCA trisc.2 = 1; // SDF return; } void main(void) { SPI_init(); LCD_init(); trisd.2 = 0; // CSn set sspbuf = 0x13; // Command Strobe for RSSI sspbuf.7 = 0; // Register access sspbuf.6 = 1; // Read register while (mssp == 0) { } trisd.2 = 1; // CSn clear LCD_hex(sspbuf); mssp = 0; }