请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
主题:USB-TO-GPIO中讨论的其他部件工具/软件:Code Composer Studio
我正在使用连接到2.8035万 EVM板的TI USB适配器接口。
是否可以在中断之外控制i2c ack或i2c TX延迟。
我想收集中断内部的数据并在中断外部进行一些操作。
这样在处理数据时就不需要阻止中断。
我认为我可以忽略TX中断,直到处理完成。
对于较小的延迟,似乎工作正常,但延迟更长...
我想知道我是否可以控制主设备的应答或响应时间,以便我有足够的时间
解析数据。
unsigned char InBuffer[BUFSIZ];
unsigned char OutBuffer[BUFSIZ];
int InBufIndex =0;
int
OutBufIndex =0;
int OutBufPos =0;
void main(void)
{
InitSysINT();
InitGpio();
DCtrl;
InitPieCtrl(); Init; IER=0x0000;
IFR = 0x0000;
InitPieVectorTable();
EALLOW;
PieVectorTable.TINT0 =&CPU_timer0_ISR;
PieVectorTable.I2CINT1A =&I2CSlaveInt1a;
InitI2C();
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,6010000);
CpuTimer0Regs.tcr.all = 0x4001;
IER || M_INT1;
IER || M_INT8;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
PieINTlRegs.PIIEIER8.bit.Ctrlx1 = 1;
EINT;
ERTM;
for (;;){/*
每隔100ms或500ms */
I2CDataHandler();
}
作废InitI2C(void)
{
I2caRegs.I2COAR = 0x50;
I2caRegs.I2CPsc.all = 9;
I2caRegs.I2CCLKL = 10;
I2caRegs.I2CCLKH = 5;
I2caRegs.I2CIER = 0x7f;
I2caRegs.I2CMDR.bit.IRS = 1;
I2caRegs.I2CMDR.bit.rm = 0;
}
中断void I2CSlaveInt1a(void)
{
UINT16 intSrc = I2caRegs.I2CISRC.bit.INTCODE;
开关(intSrc){
案例I2C_NO_ISRC:
中断;
案例I2C_ARB_ISRC:
中断;
案例I2C_Nack_ISRC:
中断;
案例I2C_ARDY_ISRC:
info.ardyCount++;
如果(I2caRegs.I2CSTR.bit.nack ==1){
I2caRegs.I2CMDR.bit.stp = 1;
I2caRegs.I2CSTR.All = I2C_CLR_nack_bit;
}
中断;
案例I2C_RX_ISRC:
/*接收中断*/中的数据
InBuffer[InBufPos+]= I2caRegs.I2CDRR;
中断;
案例I2C_TX_ISRC:
/*在中断中传输其余数据*/
如果(OutBufIndex < OutBufPos){
I2caRegs.I2CDXR = OutBuffer[OutBufIndex+];
OutBufIndex &= 0xff;
}
中断;
案例I2C_SCD_ISRC:
中断;
案例I2C_AAS_ISRC:
中断;
}
PieCtrlRegs.PIEACK.ALL = PIEACK_group8;
}
void I2CDataHandler(void)
{
OutBuffer[0]= 0x22;
OutBuffer[1]= 0x23;
OutBufPos =2;
OutBufIndex =0;
I2caRegs.I2CDXR = OutBuffer[0];
OutBufIndex+;}