Hi everyone, I'm programming TMS320F2812 to talk with TLC3578 converter. The converter is connected to McBSP port: MFSRA,MFSXA->CS, MCLKRA,MCLKXA->SCLK, MDRA->SDO, MDXA->SDI, 1->FS. The program in in C using CCS 3.3.42.1, CPU clock 150MHz. The piece of code below is the essence of the program. The problem is that I can't get to work even the McBSP port alone. I want to send two consecutive 0xFFFF just to put TLC into default mode but my oscilloscope shows only the first 0xFFFF is sent. The next is ignored or so, even if I check the XRDY flag. #include "DSP281x_Device.h" #include "DSP281x_Examples.h" int transfer_in_progress = 0; void interrupt TLC3578_ExtInt1(void); int main(void) { DINT; // wyłącz przerwania InitSysCtrl(); InitPieVectTable(); EALLOW; SysCtrlRegs.LOSPCP.bit.LSPCLK = 3; GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8 = 1; // GPB8 is CAP4 input PieVectTable.CAPINT4 = (PINT)TLC3578_ExtInt1; EvbRegs.CAPCONB.bit.CAP4EDGE = 2; //falling edge EvbRegs.CAPCONB.bit.CAP45EN = 1; //enable CAP4,5 Unit IER |= M_INT5; // enable INT5 of IER to get the CAP interrupt GpioMuxRegs.GPFMUX.bit.MCLKXA_GPIOF8 = 1; GpioMuxRegs.GPFMUX.bit.MCLKRA_GPIOF9 = 1; GpioMuxRegs.GPFMUX.bit.MFSXA_GPIOF10 = 1; GpioMuxRegs.GPFMUX.bit.MFSRA_GPIOF11 = 1; GpioMuxRegs.GPFMUX.bit.MDXA_GPIOF12 = 1; GpioMuxRegs.GPFMUX.bit.MDRA_GPIOF13 = 1; McbspaRegs.SPCR2.bit.FRST = 0; // reset frame generator McbspaRegs.SPCR2.bit.GRST = 0; //reset generator McbspaRegs.SPCR1.bit.RRST = 0; //reset receiver McbspaRegs.SPCR2.bit.XRST = 0; //reset transmitter McbspaRegs.PCR.bit.FSXM = 1; McbspaRegs.PCR.bit.CLKXM = 1; McbspaRegs.PCR.bit.FSXP = 1; McbspaRegs.PCR.bit.FSRP = 1; McbspaRegs.PCR.bit.CLKXP = 1; McbspaRegs.PCR.bit.CLKRP = 1; McbspaRegs.XCR2.bit.XDATDLY = 0; //0 bit data delay McbspaRegs.RCR2.bit.RDATDLY = 0; //0 bit data delay McbspaRegs.XCR1.bit.XWDLEN1 = 2; //word length McbspaRegs.RCR1.bit.RWDLEN1 = 2; //word length McbspaRegs.SPCR1.bit.CLKSTP = 2; McbspaRegs.SRGR2.bit.CLKSM = 1; McbspaRegs.SRGR1.bit.CLKGDV = 4; McbspaRegs.SPCR2.bit.GRST = 1; //enable generator McbspaRegs.SPCR2.bit.XRST = 1; //enable transmitter McbspaRegs.SPCR1.bit.RRST = 1; //enable receiver McbspaRegs.SPCR2.bit.FRST = 1; // enable frame generator { volatile int tick; for(tick = 0; tick < 100; tick++); } GpioMuxRegs.GPADIR.bit.GPIOA14 = 1; EDIS; EINT; // włącz przerwania PieCtrlRegs.PIEIFR5.bit.INTx5 = 0; EvbRegs.EVBIMRC.bit.CAP4INT = 1; McbspaRegs.DXR1.all = 0xFFFF; { volatile int tick; for(tick = 0; tick < 50; tick++); } PieCtrlRegs.PIEIFR5.bit.INTx5 = 0; EvbRegs.EVBIMRC.bit.CAP4INT = 1; McbspaRegs.DXR1.all = 0xFFFF; while(1) { if(!transfer_in_progress) { transfer_in_progress = 1; PieCtrlRegs.PIEIFR5.bit.INTx5 = 0; PieCtrlRegs.PIEIER5.bit.INTx5 = 1; EvbRegs.EVBIMRC.bit.CAP4INT = 1; McbspaRegs.DXR1.all = 0xD000; } } return 0; } void interrupt TLC3578_ExtInt1(void) { static long i = 0; transfer_in_progress = 0; if(i++ >= 1000) { i = 0; GpioDataRegs.GPATOGGLE.bit.GPIOA14 = 1; } EvbRegs.EVBIFRC.all = BIT0; PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; } Can anyone show me what I'm doing wrong or give example of code? regards Bartek _____________________________________ Do you know a company who employs DSP engineers? Is it already listed at http://dsprelated.com/employers.php ?
TMS320F2812 doesn't work with TLC3578 via McBSP
Started by ●April 3, 2007