酷!學園
技術討論區 => Embedded 討論版 => 主題作者是: narsilx 於 2012-04-27 16:06
-
各位先進好, 我有些問題想請教
目前手上有塊板子,上面的CPU是ARM,
u-boot完成工作,我就停下他不進Linux kernel
目前我只知道透過指令能看到memory, nand flash
此時memory只有physical address供我操作(所以跟MMU無關, 因為MMU是搭配OS作用?)
在這環境下我想自己來操作板子上的LED燈(無其他程式可供利用)
我在linux driver書上找到操作device的有兩種模式,
一種是Memory Mapped,device的pin腳已經對應到特定memory address
另一種是Device I/O, 需用asm特別的指令去access io address
ARM似乎是屬於前者
但我現在的環境不在OS裡,此時就已經有Memory Mapped I/O?
所以要操作板子上的LED燈
只要知道LED的pin對應memory address直接對address作規定initial步驟走
就可以操作該LED嗎?
因為我也不清楚Memory mapped I/O是由OS實現還是硬體就已經實現,
是看到前人寫的東西,來推測,譬如說watchdog就直接對特定address操作而已
-
哇,太高深了...
只能幫推~~~
-
各位先進好, 我有些問題想請教
目前手上有塊板子,上面的CPU是ARM,
u-boot完成工作,我就停下他不進Linux kernel
目前我只知道透過指令能看到memory, nand flash
此時memory只有physical address供我操作(所以跟MMU無關, 因為MMU是搭配OS作用?)
在這環境下我想自己來操作板子上的LED燈(無其他程式可供利用)
我在linux driver書上找到操作device的有兩種模式,
一種是Memory Mapped,device的pin腳已經對應到特定memory address
另一種是Device I/O, 需用asm特別的指令去access io address
ARM似乎是屬於前者
但我現在的環境不在OS裡,此時就已經有Memory Mapped I/O?
所以要操作板子上的LED燈
只要知道LED的pin對應memory address直接對address作規定initial步驟走
就可以操作該LED嗎?
因為我也不清楚Memory mapped I/O是由OS實現還是硬體就已經實現,
是看到前人寫的東西,來推測,譬如說watchdog就直接對特定address操作而已
雖然只有把boot loader燒壞過的經驗,不過以以前的經驗來說,boot loader的shell應該有直接寫資料到記憶體的指令。而我上次看到device map IO應該是大學微處理機的8088組語吧。
最簡單的方式就是看Data Sheet的GPIO位址,看一下LED接到第幾個GPIO後,在Bootloder shell直接對那個記憶體填值就一翻兩瞪眼。最多久是填一(pull low?)或零(pull high?)點亮的差別,以及是否需要先設定那個GPIO位址的方向是否為output(可能要寫另外一個位址)。
不過要控制更精密的週邊,扯到timing的話,我想應該會改到code。不知道現在有沒有比較方便的方式,不然bootloader燒掛最壞的情況要把IC解焊然後把golden image透過燒錄器燒回去再焊回去。