我看了下sci loopback例程里定义了以下数组
Uint16 sdataA[2]; // Send data for SCI-A
Uint16 rdataA[2]; // Received data for SCI-A
Uint16 rdata_pointA; // Used for checking the received data
然后主函数里给sdata数组写入数据
for(i = 0; i<2; i++)
{
sdataA[i] = i;
}
rdata_pointA = sdataA[0];
然后interrupt void sciaRxFifoIsr(void)就被触发了?
主要有以下疑惑:
1.sdata[]和fifo的关系是什么呢?程序里这两个好像完全没有关联,为什么给sdata写入数据后fifo就能进入中断开始发送数据呢?
2.看了下数据手册fifo的数据手册,好像并没有16个字节存放数据的FIFO寄存器,那么是怎么访问FIFO中的数据的呢?
EE搬砖工:不好意思,我打错了,是主函数里给sdata数组写入数据后interrupt void sciaTxFifoIsr(void)就被触发了。
我看了下sci loopback例程里定义了以下数组
Uint16 sdataA[2]; // Send data for SCI-A
Uint16 rdataA[2]; // Received data for SCI-A
Uint16 rdata_pointA; // Used for checking the received data
然后主函数里给sdata数组写入数据
for(i = 0; i<2; i++)
{
sdataA[i] = i;
}
rdata_pointA = sdataA[0];
然后interrupt void sciaRxFifoIsr(void)就被触发了?
主要有以下疑惑:
1.sdata[]和fifo的关系是什么呢?程序里这两个好像完全没有关联,为什么给sdata写入数据后fifo就能进入中断开始发送数据呢?
2.看了下数据手册fifo的数据手册,好像并没有16个字节存放数据的FIFO寄存器,那么是怎么访问FIFO中的数据的呢?
Susan Yang:请问您现在使用的时哪款芯片以及开发板?
我看了下sci loopback例程里定义了以下数组
Uint16 sdataA[2]; // Send data for SCI-A
Uint16 rdataA[2]; // Received data for SCI-A
Uint16 rdata_pointA; // Used for checking the received data
然后主函数里给sdata数组写入数据
for(i = 0; i<2; i++)
{
sdataA[i] = i;
}
rdata_pointA = sdataA[0];
然后interrupt void sciaRxFifoIsr(void)就被触发了?
主要有以下疑惑:
1.sdata[]和fifo的关系是什么呢?程序里这两个好像完全没有关联,为什么给sdata写入数据后fifo就能进入中断开始发送数据呢?
2.看了下数据手册fifo的数据手册,好像并没有16个字节存放数据的FIFO寄存器,那么是怎么访问FIFO中的数据的呢?
EE搬砖工:
回复 Susan Yang:
用的是launchpad,28379D的那款。程序是controlsuite里的sci loopback interrupt那个例程。
我看了下sci loopback例程里定义了以下数组
Uint16 sdataA[2]; // Send data for SCI-A
Uint16 rdataA[2]; // Received data for SCI-A
Uint16 rdata_pointA; // Used for checking the received data
然后主函数里给sdata数组写入数据
for(i = 0; i<2; i++)
{
sdataA[i] = i;
}
rdata_pointA = sdataA[0];
然后interrupt void sciaRxFifoIsr(void)就被触发了?
主要有以下疑惑:
1.sdata[]和fifo的关系是什么呢?程序里这两个好像完全没有关联,为什么给sdata写入数据后fifo就能进入中断开始发送数据呢?
2.看了下数据手册fifo的数据手册,好像并没有16个字节存放数据的FIFO寄存器,那么是怎么访问FIFO中的数据的呢?
Susan Yang:
回复 EE搬砖工:
FIFO可以理解为一个先进先出的buffer,收发FIFO主要是为了解决串口收发中断过于频繁而导致CPU的效率不高的问题。如果没有FIFO,则没收发一个数据都要中断处理一次,有了FIFO,可以在连续收发若干个数据(根据FIFO的深度而定)后才产生一次中断去处理数据,大大提高效率。
C28x的SCI 在设定一个FIFO level之后,如果FIFO接收到的数据等于这个level,就会触发FIFO接收中断。
具体您可以看一下
www.ti.com/…/spruhm8i.pdf
的 19.13.1 SCI FIFO Description
以及 Figure 19-10. SCI FIFO Interrupt Flags and Enable Logic