簡體   English   中英

讀取和比較32位架構中的10位寄存器

[英]Reading & comparing 10-bit register in 32-bit architecture

我目前正在基於32位ARM9的微控制器內編程10位ADC。 該10位ADC將數字化模擬值保存在名為“ADC_DATA_REG”的10位寄存器中 ,該寄存器使用位9-0(LSB)。 我必須讀取該寄存器的值並將其與名為“CONST”32位常量進行比較。 我的嘗試看起來像這樣,但它不起作用。 我在這里失蹤了什么? 我應該使用輪班操作嗎? 這是我第一次處理這個問題,所以任何例子都會受到歡迎。

以下代碼已針對coments和anwsers進行了編輯,但仍然無效。 我還添加了一個while語句,用於在讀取ADC_DATA_REG之前檢查ADC_INT_STATUS標志是否已升級。 上述標志表示一旦ADC完成轉換並且數據准備好從ADC_DATA_REG讀取,就會掛起一個中斷。 事實證明,即使將寄存器ADC_DATA_REG的值分配給它,數據仍保持為0,因此這就是我的LED始終打開的原因。 它也意味着我得到了一個中斷,ADC_DATA_REG中應該有數據,相反它似乎沒有......

#define CONST 0x1FF
unsigned int data = 0;

while (!(ADC_INT_STATUS_REG & ADC_INT_STATUS))
data = ADC_DATA_REG; 

if ((data & 0x3FF)> CONST){ 
   //code to turn off the LED 
} 
else{ 
   //code to turn on the LED 
}

你不會寫ADC_DATA_REG如何獲取10位值。 但我認為它只是對某個IO地址的讀取。 在這種情況下,從地址讀取返回32位。 在您的情況下,只有較低的10有效(或有效)。 另外22位可以是任何東西(例如狀態位,垃圾,......),因此在繼續處理數據之前,應該將前22位置零。

如果10位值已簽名,您還應執行符號擴展並更正您的數據類型(我知道端口IO是無符號的,但可能是adc返回的10位值不是)。 然后你的比較應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM