#1楼主:两个问题
文章发表于:2008-09-27 06:49
1,在用I2C或SPI读写数据的过程中是否必须关闭中断,不然会影响I2C或SPI的数据传输。
2,我相定义一个数组并把它放在FLASH中,程序运行时直接从FLASH中调用数组的值以节省RAM空间,该怎么做
#3
文章发表于:2008-09-28 08:51
不关中断在读写数据的时候产生中断会打断I2C建立的时钟,中断结束后使程序进入死循环。请问该怎么解决?
#4
文章发表于:2008-09-28 11:17
I2C模块是硬件产生时钟,中断不会影响I2C模块工作。
#5
文章发表于:2008-09-29 09:44
在执行中断程序的时候,I2C停止了传输数据,这样时钟还能保持吗?
#6
文章发表于:2008-09-29 10:08
请问你知道I2C的工作原理吗?停止传输数据时,哪里还有时钟?
#8
文章发表于:2008-10-06 11:47
我的意思是说I2C读写数据的过程中(比如要读10个数据,现在只读了5个)产生了中断,在中断服务程序执行完成后,我怎么继续读剩下的五个数据,难道要重新建立时钟。
#10
文章发表于:2008-10-06 16:40
void write_data(u8* pBuffer,u8 ReadAddr,u8 ReadAddr1,u16 NumByteToRead)
{
I2CCounter1 = NumByteToRead;
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0xa0, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, ReadAddr1);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C1, ReadAddr);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
while(I2CCounter1 != 0)
{
I2C_SendData(I2C1, *pBuffer);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
pBuffer++;
I2CCounter1--;
}
I2C_GenerateSTOP(I2C1, ENABLE);
}
void write_data(u8* pBuffer,u8 ReadAddr,u8 ReadAddr1,u16 NumByteToRead)是在主程序中运行的,如果程序执行到红色的地方时产生了中断,那么中断结束后该怎么处理?是不是要重新建立时钟?
#11
文章发表于:2008-10-06 18:31
不明白"重新建立时钟"是什么概念?
如果有需要“重新建立”,那么请问之前的时钟是如何建立的?