请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28027 我正在尝试在项目上使用 I2C 和 SPI 总线。
问题是、当我尝试同时使用这两个代码块时、取消注释每个相应的代码块、SPI 和 I2C 不能正常工作。
当注释掉另一个块时、这两个块都能完美工作。 我使用 SPI 总线对 DAC 和 PGA 进行编程、并使用 I2C 总线对一组 LED 进行编程。
我将粘贴下面的相关代码。 例如、标记为"error:Hangked here"的代码在 SPI 块也被编译时会一直等待 ACK、但在注释掉 SPI 代码时始终有效。
我意识到很难根据代码片段提出建议、但是否有人知道我应该在哪里寻找问题? 该程序正在闪存中运行、我将时间关键型函数复制到 RAM 中。
//使用 I2C 总线。 如果未编译 SPI、则正常工作。 void set_LEDs (uint16 slave_addr、uint16 ON_OFF) { int i; I2caRegs.I2CSAR =从器件地址; I2caRegs.I2CMDR.ALL = 0x4620; //自由,MST,TRX,IRS I2caRegs.I2CCNT = LEN_ON_MSG; I2caRegs.I2CMDR.bit.STT = 1; //开始条件 I2caRegs.I2CMDR.bit.STP= 1; // CNT=0时将生成停止条件 如果(ON_OFF = ON) { 对于(i=0;i 'd'="5" (see="" sprufz9d.pdf)="" produces="" at="" 300="" khz,="" 50%="" duty="" cycle.="" i2caregs.i2cpsc.all="5;" 60="" (ipsc+1)="10" i2caregs.i2cclkl="3;" iccl+d="6" i2caregs.i2cclkh="3;" icch+d="6" clk_enablei2cclock(myclk);="" i2caregs.i2csar="TLC59116_SLAVE_ADDR_60;" i2caregs.i2cmdr.bit.irs="1;" enable="" (i2caregs.i2cmdr.bit.stp="" !="0);" return;="" spi="" works="" fine="" if="" is="" not="" compiled="" in.="" spi_init()="" clk_enablespiaclock(myclk);="" spi_resetchannels(myspi);="" spi_setcharlength(myspi,="" spi_charlength_16_bits);="" spi_setmode(myspi,="" spi_mode_master);="" spi_setbaudrate(myspi,="" spi_baudrate_500_kbaud);="" spi_setpriority(myspi,="" spi_priority_freerun);="" spi_enablechannels(myspi);="" spi_disableloopback(myspi);="" spi_enabletx(myspi);="" spi_settriwire(myspi,="" spi_triwire_threewire);="" spi_setclkphase(myspi,="" spi_clkphase_delayed);="" spi_setclkpolarity(myspi,="" spi_clkpolarity_outputrisingedge_inputfallingedge);="" spi_enable(myspi);="" spi_fifo_init(void)="" spi_enablefifoenh(myspi);="" spi_resettxfifo(myspi);="" spi_cleartxfifoint(myspi);=""