Quantcast
Channel: Microcontrollers
Viewing all articles
Browse latest Browse all 223352

Forum Post: RE: TMS320F28027: Problem with Configuring SPI

$
0
0
Hey Veena, I changed data coming from arduino to a 16 bit number as int c = 0x00ff. And changed SPICHAR to 0. Now interrupt flag is set. Still program not entering into Interrupt Service Routine. We are receiving data using polling mode but while sending 0x00ff for every 2sec we are recieving sequence of numbers 31,4095,65535.. . which are also not consistent . Could you throw some light on SPICHAR usage ? Also about ISR issue. Thank you for your time and support F28027 code: #include "DSP28x_Project.h" interrupt void spi_rcs_isr(); void main() { InitSysCtrl(); /*Interrupt config*/ DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.SPIRXINTA = &spi_rcs_isr; PieCtrlRegs.PIECTRL.bit.ENPIE =1; PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // for spircs PieCtrlRegs.PIECTRL.bit.PIEVECT= 0x0D90; IER |= M_INT6; // cpu interrupt 6 for spirx EINT; ERTM; /* GPIO pull up enable*/ GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; /*Qualification Select*/ GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; /*Setting up GPIO pins in SPI mode*/ GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; /* SPI config */ SpiaRegs.SPICCR.bit.SPISWRESET = 0; // reset SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0; // slave mode SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; // data out on rising and in on falling SpiaRegs.SPICTL.bit.CLK_PHASE = 0; // no delay //SpiaRegs.SPIBRR = 127; // lowest baud rate SpiaRegs.SPICCR.bit.SPICHAR = 0; // 1 bit word SpiaRegs.SPISTS.bit.OVERRUN_FLAG = 0; SpiaRegs.SPISTS.bit.INT_FLAG = 0; SpiaRegs.SPIPRI.bit.TRIWIRE = 0; SpiaRegs.SPIFFRX.bit.RXFFIENA = 0; SpiaRegs.SPICTL.bit.OVERRUNINTENA = 1; //enable reciever overrun SpiaRegs.SPICTL.bit.SPIINTENA = 1; // tx and rx interrupt enable SpiaRegs.SPICCR.bit.SPISWRESET = 1; //release from reset /* data transmission */ uint16_t data_rx =0; SpiaRegs.SPICTL.bit.TALK = 0; // transmission off while(1){ if(SpiaRegs.SPISTS.bit.INT_FLAG ==1){ // Waits until data rx’d data_rx = (SpiaRegs.SPIRXBUF & 0x00ff); } } } interrupt void spi_rcs_isr() { int data_rx; data_rx = SpiaRegs.SPIRXBUF; } Arduino code: #include void setup (void) { Serial.begin(115200); //set baud rate to 115200 for usart digitalWrite(SS, HIGH); // disable Slave Select SPI.begin (); SPI.setClockDivider(SPI_CLOCK_DIV128);//divide the clock by 8 } void loop (void) { int c=0x00ff; digitalWrite(SS, LOW); // enable Slave Select SPI.transfer(c); Serial.print(c); digitalWrite(SS, HIGH); delay(2000); }

Viewing all articles
Browse latest Browse all 223352


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>