Ben RF ileten bir ASIC ve sonuçta bir PC'ye veri göndermesi gereken kablosuz alıcısı içeren bir proje üzerinde çalışan bir araştırma ekibinin lisans üyesiyim.
Alıcı hızlı , sürekli, eşzamansız, standart olmayan bir seri sinyal (yani SPI, I2C, UART, vb.) Çıkarır, bu yüzden işim alıcıyı bilgisayara arayüzlemek için mikrodenetleyici yazılımı yazmaktır. Şu anda benim yaklaşımım, verileri dairesel bir arabellek içine yerleştirmek ve ana döngüde tüm bit-bit kod çözme işlemini yapmak için kenar tetiklemeli kesmeler kullanmaktır. Mikrodenetleyici, USB (sanal com port) kullanarak bu verileri aynı anda bilgisayara vermelidir.
İşte yaşadığım bir sorun ve tahmin ettiğim bir sorun:
Çok güçlü 72 MHz ARM Cortex M3 işlemcimle bile arabelleğe alınan verileri yeterince hızlı işleyemiyorum. Bit hızı 400 Kb / sn'dir (2,5 us / bit). Bit başına sadece 180 devir bırakan referans için (kod çözme VE ISR, ~ 30 devir havai ahır içeren!). MCU ayrıca ana döngüde sorguladığı diğer birçok görevi de yerine getirmelidir.
USB sanal com port sürücüsü de kesinti tabanlıdır. Bu, sürücünün sonunda işlemcinin o kadar uzun süre kesileceğini ve birazcık iletilebileceği 2.5 mikrosaniye (180 döngü) penceresini kaçıracağından neredeyse emin olmamı sağlıyor. Bunun gibi kesinti çatışmalarının / ırklarının normal olarak nasıl çözüldüğünden emin değilim.
Yani soru şu ki, bu sorunları çözmek için ne yapılabilir ya da bu doğru bir yaklaşım değil midir? Daha az yazılım merkezli yaklaşımları da düşünmeye hazırım. Örneğin, kod çözme için bir tür donanım durum makinesine sahip özel bir USB çipi kullanmak, ancak bu alışılmadık bir bölgedir.