開發紀錄(A)
2015q3 Homework #7
作業要求 (A)
  • 安裝和設定 QEMU
  • 依據指示,將 00-Semihosting, 00-HelloWorld, …, 07-Threads 均實際測試並研讀程式碼
被強者感動啦!!
莊彥宣同學分享mini-arm-os作業心得:
可以uart output了,那麼接下來就是設定uart input,這樣才能夠輸入參數,查表嚕 找到USART2的位址,可以看到記憶體的位址怎麼擺,看到Receiver  ,就可以知道Rx的pin要怎麼打開,判斷的話可以去查鍵盤的編號,以不同的數字做不同的事情,按下enter 搜尋 cmd,按下delete要進行刪掉【往前一個印空白,在退回到原來位置】,strtok也要自己來,滿有趣的
 
 
USART 設定解說:
p41、42有RCC、GPIOA、USART2 Memory map內容:
 
#define __REG_TYPE        volatile uint32_t
#define __REG                __REG_TYPE *
/* RCC Memory Map */
#define RCC             ((__REG_TYPE) 0x40021000)
#define RCC_CR          ((__REG) (RCC + 0x00))
#define RCC_CFGR        ((__REG) (RCC + 0x04))
#define RCC_CIR         ((__REG) (RCC + 0x08))
#define RCC_APB2RSTR    ((__REG) (RCC + 0x0C))
#define RCC_APB1RSTR    ((__REG) (RCC + 0x10))
#define RCC_AHBENR      ((__REG) (RCC + 0x14))
#define RCC_APB2ENR     ((__REG) (RCC + 0x18))
#define RCC_APB1ENR     ((__REG) (RCC + 0x1C))
#define RCC_BDCR        ((__REG) (RCC + 0x20))
#define RCC_CSR         ((__REG) (RCC + 0x24))
os.c中的RCC設定內容:
*(RCC_APB2ENR) |= (uint32_t) (0x00000001 | 0x00000004); 
        //Alternative Function I/O、I/O portA Clock Enable
*(RCC_APB1ENR) |= (uint32_t) (0x00020000);   //USART2EN Enable 
p95、96: 
p97、98:
/* GPIO Memory Map */
#define GPIOA            ((__REG_TYPE) 0x40010800)
#define GPIOA_CRL        ((__REG) (GPIOA + 0x00))  //控制GPIOx的低8位
#define GPIOA_CRH        ((__REG) (GPIOA + 0x04))  //控制GPIOx的高8位
#define GPIOA_IDR        ((__REG) (GPIOA + 0x08))  //input data register
#define GPIOA_ODR        ((__REG) (GPIOA + 0x0C))  //ouput data register