ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年11月8日 星期四

Atmel Xmega 架構說明

這個應該要參考 XMEGA D Manual (doc8210.pdf)

  • harvard architecture -- seperate program and data bus
  • single level pipeline, one executed, one pre-fetch (這樣不就是 2 level ?)
  • 是 8/16 bit risc microcontrollers (8/16 是什麼意思?)
  • 32 個8bit general purpose working registers.
  • 有 program memory (flash),EEPROM 和 SRAM
  • Stack in RAM
  • Stack pointer accessible in I/O memory space
  • direct addressing 16MB , both data and program memory
  • 16/24 bit I/O registers (?)
  • I/O status & control registers 位於 lowest 4KB data memory addess
  • SRAM 的位置是由 0x2000 開始
  • EEPROM 是 0x1000 到 0x1FFF
  • program memory 被分成兩部份:boot program section, application program section

跟 context switch 最有關係的是 stack 和 status register。

Status Register : SREG
  • 在 interrupt 發生時,cpu 並不會作 save-restore 的動作,需要寫出code來作
  • SREG 也被mapping 在 I/O memory space,所以可以自由存取

Stack & Stack Register : SP
  • Stack Register 的size 是兩個 byte,一樣mapping 到 I/O memory 的位置,佔兩個位址
  • 和一般 Stack 一樣,初始在高位址,push 時減少address。
  • CPU reset 時,SP 的初始值是 SRAM 的最高位址
  • SP 也可以由軟體更改,但是必須要在0x2000 以上
  • 執行中斷和call指令時,return address 會自行 push 到 stack,同樣的 RET, RETI 指令會自動 pop
  • 執行 中斷, call, RET, RETI 命令時,每次push/pop 的size 隨裝置的program memory 大小而有不同,program memory 小於 128k 的裝置,每次 push/pop 2 個 byte,大於 128k 的,每次三個 byte
  • 值行單純的 push, pop 命令時,每次只能對 1 個 byte 操作
  • 當變更 SPL (SP 內容) 時,會自動 disable interrupt 4 個 instruction cycle



這樣的架構是可以support rtos 的,
這篇文章有說明在 interrupt routine 中,preserve/restore context 的code:
Preserving sreg in AVR interrupts

在avrfreak 有一篇 freeRTOS , atxmega128a1 port 的code,
這段是寫在 include/FreeRTOS v6.1.0/ISR_Support.h 中。

沒有留言:

標籤

網誌存檔