CubeIDE Debug Modda RXNE Biti
ARM çalışmalarında EmBitz den Atollic Ture Studio’ya geçmek isterken CubeIDE yi fark ettim, anladığım kadarıyla ST firması Atollic TS ile CubeMx i birleştirerek bir geliştirme ortamı oluşturmuş. Sağolsun Coşkun Hoca’nın youtube videoları bir çok konuda aydınlatıcı oldu, CubeIDE ye hızlıca adapte oldum.
Bu arada uzun zamandır mesafeli durduğum HAL kütüphaneleriyle de barış imzaladım artık, daha fazla direnmiyorum. Üst seviye kütüphaneler kullanılsa da yapılan işlere hakim olabilmek için çevre birimlerini register düzeyinde tanımak gerekiyor.
USART kesmesini Debug modda çalışırken bir durum fark ettim. Normalde dışardan USART birimimize 1 byte veri geldiğinde USARTx Status Registeri RXNE bayrağı 1 e çekiliyor, eğer CR1 registeri RXNEIE biti 1 ayarlandıysa yani Interrupt Enable ayarlandıysa USART biriminden NVIC kontrolcüsüne kesme talebi iletiliyor. Eğer NVIC te USART kesmesi aktifse programın kesme alt programına dallanması gerekiyor.
Fark ettiğim durum şu: Debug modda Docklight seri port programından herhangi bir veri gönderdiğimde RXNE bayrağı 1 e çekiliyor ancak hemen sonra (ilk “instruction” işletildiğinde) kendiliğinden 0 oluyor, halbuki 0 olması için ya data_register dan verinin okunması ya da RXNE ye 0 yazılması gerekiyor.
Böyle olunca program kesme alt programına dallansa bile kesme kaynağının kontrolü yani RXNE bitinin kontrolü başarısız oluyor, sanki kesme kaynağı RX veri gelmesi değilmiş gibi bir durum oluşuyor. Bu durumda Debug modda RX veri için hazırlanan kesme alt programı işletilememiş oluyor.
Araştırmalarımda ST forumlarında benzer bir soru sorulduğunu gördüm:
Ancak konuda faydalı bir bilgi göremedim.
Kodu Debug modda değil de direkt Run a basarak çalıştırdığımda RXNE biti olması gerektiği gibi davrandı. RXNE bayrağının veri okunmadıkça 0 a düşmediğini gördüm. Aşağıdaki kod Debug modda bir byte veri geldikten sonra ledi sadece 1 defa toggle ederken, Run a basarak çalıştırdığımda bir byte veri geldikten sonra ledin sürekli toggle olduğunu gördüm.
//NVIC USART disabled
while (1)
{
if(USART1->SR & 0b0000010000){ // RXNE bit kontrol
GPIOC->ODR ^= GPIO_ODR_ODR13; // led toggle
HAL_Delay(500);
}
}
Emin değilim ama bu durum Debug modun bir Bug’ı olarak görünüyor, buraya bir not düştüm. Herkese iyi çalışmalar.
0 thoughts on “CubeIDE Debug Modda RXNE Biti”