- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello There,
using below peace of code i am trying to read external 8 bit data from DATA_IN bus.during edge_capture interrupt arrive, though it read almost all data but it miss 2-3 data during reading. LPKtCount = 178 PktSize = 1472 if(edge_capture){
edge_capture = 0; //reset interrupt
imgbuff[lpktcount][count++] = iord_altera_avalon_pio_data(data_in_base);
if(count == pktsize) //check end of packet-data -->1472
{
count = 0; //point to start of packet data
lpktcount++; //increment packet count
}
} //------------------------------------------------------------------------- ImgBuff[MaxPacket][PktSize] is a two dimentional array which hold the Incomind data (8 bit). Writing data in Array only during Edge_capture Interrupt arrive (LOAD). Every time edge_capture interrupt get high it load the data from external sybc_detct and write in to two dimentional array. But some time it misse the data and read next data. (for sake simplicity i have give count sequence as a input data) As shown in print screen of output highlighted part, where 39 is the Address and 40 is the data. This position 39:40 is not a fix position next time it miss some different value. Address is locally generated counter but reading data from external sync_detect (from 8 bit bus). 7. I have seen (On Logic Analyzer) that external sync _detect gives proper data mean it is not missing any data. Please suggest Guide where went wrong in my code. I have assign highest priority to this load pulse. Please see PrintScreen of 1. Hardware (Nios-II and Sync_Detect) 2. Software Output (Highleted) regards kaushal kanwariya
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
One possibility is that your input signal is changing too fast for the CPU. Handling an interrupt takes many cycles. If you want to be sure not to miss any data you should create a handshake mechanism, or provide your data through an Avalon Stream interface and read it with a DMA.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
--- Quote Start --- One possibility is that your input signal is changing too fast for the CPU. Handling an interrupt takes many cycles. If you want to be sure not to miss any data you should create a handshake mechanism, or provide your data through an Avalon Stream interface and read it with a DMA. --- Quote End --- Thanking you for reply. will try this out. kaushal

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page