2-如何檢視技術手冊

YIZIMU發表於2018-07-26

回顧:
   開發板燒寫實驗
     cpu:              SEC_S5P6818X_Users_Manual_preliminary_Ver_0.00.pdf

LED驅動程式開發

1、電路原理圖
   底板:x6818bv2.pdf
       結論,如果讓LED1亮或者滅
             其實就是讓導線GPIOC12出現低電平或者高電平
   核心板:x4418cv3_release20150713.pdf
        搜尋 “GPIOC12”
        導線"GPIOC12"連線到了CPU W15管腳上了
       結論,其實控制LED1的亮滅
             實則就是控制cpu上的W15管腳出現低/高電平
   問題:如何程式設計控制W15管腳上出現高電平或者低電平?
         答案應該去cpu datasheet中找
2、cpu datasheet
   P68:
       w15管腳的可選功能1
   該cpu上有160個GPIO管腳
   
   GPIOCALTFN0 : 0xc001c020
       [25:24], 01 配置為可選功能1(輸入輸出功能)
   GPIOCOUTENB:  0xc001c004
       [12]     1,  選擇輸出功能
   GPIOCOUT:     0xc001c000
       [12]     1/0  輸出高/低電平
3、C語言回顧
  3.1 指標
      常數:0xc001c020
      地址:(unsigned int *)0xc001c020
      讀其中內容 :*((unsigned int *)0xc001c020)
      寫入內容: *((unsigned int *)0xc001c020) =100  

      訪問特殊功能暫存器的標準寫法      
            *((volatile unsigned int *)0xc001c020)
      volatile的作用?使用場合?
         防止編譯器的過度優化
  3.2位操作    
      //錯誤的
      *((volatile unsigned int *)0xc001c020)= 0x01000000
      //有BUG 假如該暫存器原來bit25=1
      *((volatile unsigned int *)0xc001c020)|= 0x01000000
      
      //將24 25bit清0      
      *((volatile unsigned int *)0xc001c020)&= 0xfcffffff
      //將24bit置1
      *((volatile unsigned int *)0xc001c020)|= 0x01000000

      //標準寫法
      *((volatile unsigned int *)0xc001c020)&= ~(3<<24);
      *((volatile unsigned int *)0xc001c020)|= (1<<24);
4、編輯程式

5、編譯程式
  5.1 安裝交叉編譯工具
     sudo chmod 777 /opt/ -R
     cp /home/tarena/workdir/arm-linux-gcc/arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz /opt/
     cd /opt
     tar xf arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz   
     vi ~/.bashrc
        export PATH=$PATH:/opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/bin/
     source /home/tarena/.bashrc
     arm-cortex_a9-linux-gnueabi-gcc -v
   5.2 編譯led.c
     1)arm-cortex_a9-linux-gnueabi-gcc -c led.c -o led.o -nostdlib
     2)arm-cortex_a9-linux-gnueabi-ld -nostdlib -nostartfiles -Ttext=0x48000000 -eled_test led.o -o led.elf
     3)arm-cortex_a9-linux-gnueabi-objcopy -O binary led.elf led.bin  
6、執行程式
   cp led.bin /tftpboot/

   在開發板上執行:
      tftp 0x48000000 led.bin
      go 0x48000000

   

 

 

 

 

 

 

相關文章