#include "F2806x_Device.h" #include "F2806x_Gpio.h" #include "F2806x_Spi.h" #include "stdio.h" UNS16 Transmitting_Data_g[40] = {0x0A00, 0x0000, 0x1000, 0x2000, 0x2000, 0x0B00, 0x0000, 0x0000, 0x0E00, 0xE000, 0x1100, 0x1100, 0xC100, 0x0E00, 0xE000, 0x1100, 0x1100, 0xC200, 0x0E00, 0xE000, 0x1100, 0x1100, 0xC300, 0x0E00, 0x6100, 0x1100, 0xD000, 0xC400, 0x0E00, 0x6100, 0x1100, 0xD000, 0xC500, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000}; UNS16 j_g = 0; void main(void) { UNS8 i_g; /*Initialize System Control:PLL, WatchDog*/ InitSysCtrl(); /* Disable CPU interrupts*/ DINT; /* Initialize GPIO */ // Gpio_init(); /******************************************************************************/ /* Initialize the PIE control registers to their default state.*/ /* The default state is all PIE interrupts disabled and flags are cleared.*/ /******************************************************************************/ InitPieCtrl(); /* Disable all interrupts and clear all interrupt flags:*/ IER = 0x0000; IFR = 0x0000; /******************************************************************************/ /* Initialize the PIE vector table with pointers to the shell Interrupt Service Routines (ISR).*/ /* This will populate the entire table, even if the interrupt is not used in this. This is useful for debug purposes.*/ /******************************************************************************/ InitPieVectTable(); /*Call timer configuration*/ //Timer0_config(); /*Call spi Configuration*/ Mcu1_Spi_initialization(); /*Intialize SPI GPIO pins */ InitSpiGpio(); UNS8 Sts_Read = 0; UNS16 RX_data[4]={0}; UNS8 g=0; Mcu1_SPI_GPIO_Low(); SpiaRegs.SPITXBUF = 0x0100; while (SpiaRegs.SPIFFRX.bit.RXFFST < 1); //Wait for RXFF to have received 4 valid characters Read_Dummy_g = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) Mcu1_SPI_GPIO_High(); Mcu1_SPI_GPIO_Low(); Sts_Read = Read_Sts_Reg(); Mcu1_SPI_GPIO_High(); Mcu1_SPI_GPIO_Low(); SpiaRegs.SPITXBUF = Transmitting_Data_g[2]; SpiaRegs.SPITXBUF = Transmitting_Data_g[3]; SpiaRegs.SPITXBUF = Transmitting_Data_g[4]; while (SpiaRegs.SPIFFRX.bit.RXFFST < 3); //Wait for RXFF to have received 3 valid characters Read_Dummy_g = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) Read_Dummy_g = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) Read_Dummy_g = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) Mcu1_SPI_GPIO_High(); Mcu1_SPI_GPIO_Low(); SpiaRegs.SPITXBUF = 0x0B00; SpiaRegs.SPITXBUF = 0x0000; SpiaRegs.SPITXBUF = 0x0000; while (SpiaRegs.SPIFFRX.bit.RXFFST < 3); //Wait for RXFF to have received 3 valid characters Read_Dummy_g = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) RX_data[0] = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) RX_data[1] = SpiaRegs.SPIRXBUF; //Reading from RX buffer to discard received data (change this if you want to keep the data) Mcu1_SPI_GPIO_High(); printf("RX FIFO Status :0x%X\n", Sts_Read); printf("Control word -1 :0x%X\n", RX_data[0]); printf("Control word -2 :0x%X\n", RX_data[1]); } void Mcu1_Spi_initialization() { EALLOW; /*Enabling peripheral clock*/ SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; EDIS; /*Enabling character length control bit,Enabling SPI reset*/ SpiaRegs.SPICCR.all = 0x0007; /*Enabling SPI interrupt*/ SpiaRegs.SPICTL.bit.SPIINTENA = 1; /*Normal SPI clocking scheme*/ SpiaRegs.SPICTL.bit.CLK_PHASE = 1; /*Enabling talk bit for transmit enable */ SpiaRegs.SPICTL.bit.TALK = 1; /*SPI network mode, making as master */ SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; /* SPI baud rate control*/ SpiaRegs.SPIBRR = SPI_BRR; /* Transmit FIFO interrupt level bits setting to 2 words*/ SpiaRegs.SPIFFTX.bit.TXFFIL = 0; ///2 /* Enabling TX FIFO Interrupt*/ SpiaRegs.SPIFFTX.bit.TXFFIENA = 1; /*TX FIFO reset*/ SpiaRegs.SPIFFTX.bit.TXFIFO = 1; /*SPI FIFO enable*/ SpiaRegs.SPIFFTX.bit.SPIFFENA = 1; /*TX FIFO interrupt clear*/ SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1; /*RX FIFO interrupt enable*/ SpiaRegs.SPIFFRX.bit.RXFFIENA = 1; /*Receive FIFO interrupt level,making as 2 words*/ SpiaRegs.SPIFFRX.bit.RXFFIL = 4; // 2 /*Receive FIFO interrupt clear */ SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1; /*Receive FIFO reset */ SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1; SpiaRegs.SPIPRI.bit.FREE = 1; SpiaRegs.SPICCR.all = 0x0087; } void InitSpiGpio() { InitSpiaGpio(); } /*InitSpiaGpio - This function initializes GPIO poins to function as SPI pins*/ void InitSpiaGpio() { EALLOW; /******************************************************************************/ /* Enable internal pull-up for the selected pins /* Pull-ups can be enabled or disabled by the user.*/ /* This will enable the pullups for the specified pins.*/ /* Comment out other unwanted lines. */ /******************************************************************************/ /*Enable pull-up on GPIO16 (SPISIMOA)*/ GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; /*Enable pull-up on GPIO17 (SPISOMIA)*/ GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; /*Enable pull-up on GPIO18 (SPICLKA)*/ GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; /*Enable pull-up on GPIO19 (SPISTEA)*/ GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; delay(); /******************************************************************************/ /* Set qualification for selected pins to asynch only This will select asynch (no qualification) for the selected pins. Comment out other unwanted lines.*/ /******************************************************************************/ /*Asynch input GPIO16 (SPISIMOA)*/ GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; /*Asynch input GPIO17 (SPISOMIA)*/ GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; /*Asynch input GPIO18 (SPICLKA)*/ GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; /*Asynch input GPIO19 (SPISTEA)*/ GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; delay(); /******************************************************************************/ /* Configure SPI-A pins using GPIO regs /* This specifies which of the possible GPIO pins will be SPI*/ /*functional pins.*/ /* Comment out other unwanted lines. */ /******************************************************************************/ /*Configure GPIO16 as SPISIMOA*/ GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; /* Configure GPIO17 as SPISOMIA*/ GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; /* Configure GPIO18 as SPICLKA*/ GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; /* Configure GPIO19 as SPISTEA*/ GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; delay(); EDIS; } void Mcu1_SPI_GPIO_Low(void) { EALLOW; GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; delay(); GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; delay(); GpioDataRegs.GPASET.bit.GPIO19 = 1; delay(); GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; delay(); EDIS; } void Mcu1_SPI_GPIO_High(void) { EALLOW; GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; delay(); GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; delay(); GpioDataRegs.GPASET.bit.GPIO19 = 1; delay(); EDIS; } void delay(void) { for(j_g=0;j_g<=10000;j_g++) { } }