(exynos4412)Tiny4412裸機開發-點亮LED燈

      網友投稿 739 2022-05-29

      1. 前言

      Tiny4412開發是友善之臂推出的Android、Linux學習開發板,CPU采用三星的EXYNOS4412,32位芯片,屬于Cortex-A系列,主頻是1.5GHZ,可以運行ubuntu、Android5.0、純Linux等操作系統。

      這篇文章就介紹利用這款開發板完成裸機開發,不涉及操作系統,直接當做單片機一樣,完成LED燈、蜂鳴器的編程,了解這款芯片與常規的Cortex-M系列芯片編程有何區別。

      核心板如圖:

      下面是開發板的實物圖:

      開發板的配置:

      2. 搭建交叉編譯環境

      進行裸機編程之前,需要先搭建交叉編譯環境,安裝arm-linux-gcc交叉編譯器,交叉編譯后的程序才能在開發板上運行。

      什么叫交叉編譯? PC機編譯、在嵌入式開發板運行這種模式就叫交叉編譯。

      交叉編譯器在開發板的光盤里有提供,直接拷貝到PC機Linux下解壓,配置環境變量接口。

      詳細操作步驟如下:

      1. 在Linux用戶目錄下創建一個目錄: mkdir work/arm-linux-gcc -p 2. 將交叉編譯器拷貝到Linux系統共享目錄。再解壓到arm-linux-gcc目錄下。 tar xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /home/wbyq/work/arm-linux-gcc/ 3. 添加系統環境變量 (1). root用戶: 需要將代碼寫在/etc/profile文件中 (2). 普通用戶: 需要將代碼寫在 用戶目錄下的.bash_profile文件中 profile文件系統上電的時候會自動執行。 添加環境變量的命令: export PATH=/home/wbyq/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin:$PATH 參數: export 導出--全局聲明 PATH 系統環境變量的名稱. 作用: 保存Linux系統可執行文件的搜索路徑. 輸出環境變量的值: [wbyq@wbyq ~]$ echo $PATH /home/wbyq/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wbyq/bin export LD_LIBRARY_PATH=/mnt/hgfs/linux-share-dir/sum:$LD_LIBRARY_PATH 參數: LD_LIBRARY_PATH 系統環境變量的名稱. 作用: 保存Linux系統動態庫的搜索路徑. xxx.so 4. 生效環境變量 (1). 立即生效: 當前終端有效 [wbyq@wbyq ~]$ source .bash_profile (2). 退出用戶、重新登錄系統,實現永久生效 5. 測試交叉編譯器. 學習基本用法 [wbyq@wbyq linux_2021]$ arm-linux-gcc app.c [wbyq@wbyq linux_2021]$ ls a.out app.c [wbyq@wbyq linux_2021]$ ./a.out bash: ./a.out: cannot execute binary file [wbyq@wbyq linux_2021]$ gcc app.c -o app1 [wbyq@wbyq linux_2021]$ arm-linux-gcc app.c -o app2 [wbyq@wbyq linux_2021]$ ls a.out app1 app2 app.c [wbyq@wbyq linux_2021]$ file app1 app1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped [wbyq@wbyq linux_2021]$ file app2 app2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, not stripped

      3. 點亮LED燈

      如果學習過單片機(51,STM32、MSP430、AVR之類的)編程,完成當前章節的內容應該就很容易。

      要完成LED燈的控制,需要完成以下幾個步驟:

      1. 查看原理圖 2. 配置GPIO口 3. 控制GPIO口輸出電平控制LED 4. 編譯程序: xxx.lds 鏈接文件 設備: 字符設備、塊設備、網絡設備 SD卡設備: /dev/sdb 查看塊大小: cat /sys/block/sdb/size 單位是塊(1塊512字節) 5. 燒寫到開發板測試 dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=/dev/sdb seek=1 參數: if=./E4412_N.bl1.bin 要寫到SD卡上的文件 of=/dev/sdb SD卡設備 seek=1 跳過的塊. 一個塊==512字節 執行燒寫命令: [wbyq@wbyq sd_fuse]$ sudo ./sd_write.sh /dev/sdb ../main.bin

      (1)查看原理圖,查找LED的接線位置

      tiny4412開發板是分兩層設計的,一個核心板,一個底板,LED燈是焊接在核心板上面,原理圖就得打開核心板這份。

      (2)查看芯片手冊,了解GPIO口如何配置

      配置方法也很好理解,在手冊里做了詳細介紹。LED屬于輸出控制器件,需要將GPIO口配置成輸出模式。

      GPIO的模式配置由CON寄存器完成,輸出控制由DAT寄存器完成。

      (exynos4412)Tiny4412裸機開發-點亮LED燈

      (3)編寫代碼

      /* LED的寄存器 GPM4_0 1 2 3*/ #define GPM4CON (*(volatile unsigned int *)0x110002E0) #define GPM4DAT (*(volatile unsigned int *)0x110002E4) int main(void) { /*配置GPIO口模式--配置LED燈*/ GPM4CON&=0xFFFF0000; GPM4CON|=0x00001111; /*3. 配置GPIO口模式--配置按鍵*/ GPX3CON&=0xFF0000FF; GPM4DAT&=~(1<<0); GPM4DAT&=~(1<<1); GPM4DAT&=~(1<<2); GPM4DAT&=~(1<<3); while(1) { } return 0; }

      (4)Makefile編寫

      CC=arm-linux-gcc main_sp.bin:start.o main.o arm-linux-ld -Tmain.lds -o main_sp.elf $^ arm-linux-objcopy -O binary main_sp.elf main.bin arm-linux-objdump -D main_sp.elf > main_sp_elf.dis %.o : %.S $(CC) -o $@ $< -c %.o : %.c $(CC) -o $@ $< -c clean: rm *.o *.elf *.bin *.dis -f

      (5)代碼燒寫腳本

      # # Copyright (C) 2011 Samsung Electronics Co., Ltd. # http://www.samsung.com/ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. #modify by zth # #################################### if [ -z $2 ] #檢查傳入的第三個參數長度是否為 0 then echo "傳參數順序: ./腳本.sh <要燒錄的文件>" exit 0 fi if [ -b $1 ] #檢查第二個參數是否是塊設備 then echo "$1 SD卡設備正常!" else echo "$1 SD卡設備錯誤!" exit 0 #退出腳本 fi if [ -e $2 ] #檢查第三個參數(就是要燒錄的文件是否存在) then echo "$2 文件存在." else echo "$2 文件不存在." exit 0 #退出腳本 fi BDEV_NAME=`basename $1` #變量賦值--塊設備名稱 BDEV_SIZE=`cat /sys/block/${BDEV_NAME}/size` if [ ${BDEV_SIZE} -le 0 ]; then echo "Error: NO media found in card reader." exit 1 fi if [ ${BDEV_SIZE} -gt 32000000 ]; then echo "Error: Block device size (${BDEV_SIZE}) is too large" exit 1 fi E4412_UBOOT=$2 #將要燒錄文件賦值給變量E4412_UBOOT MKBL2=./mkbl2 #需要當前路徑下有一個mkbl2文件 if [ ! -f ${E4412_UBOOT} ]; then #檢測文件是否是普通文件,非目錄和設備文件 echo "$2 文件非普通文件!請檢查文件是否正確!" exit -1 #退出腳本文件 fi if [ ! -f ${MKBL2} ]; then #檢測文件是否是普通文件,非目錄和設備文件 echo "當前目錄下缺少 mkbl2 文件!" exit -1 #退出腳本文件 fi ${MKBL2} ${E4412_UBOOT} bl2.bin 14336 #14K 通過mkbl2文件燒錄程序 地址是14336 #./mkbl2 main.bin bl2.bin 14336 #################################### # fusing images signed_bl1_position=1 bl2_position=17 uboot_position=49 tzsw_position=705 # echo "---------------------------------------" echo "BL1 fusing" #燒錄命令 ./xx.sh /dev/sdb main.bin dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=$signed_bl1_position # echo "---------------------------------------" echo "BL2 fusing" #燒錄命令 dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position sync #輸出信息 echo "---------------------------------------" echo "程序燒錄成功!" echo "請拔出SD卡,放入開發板運行!!"

      Linux 硬件開發

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:聲音繪畫——傳說中不一樣的煙火……
      下一篇:決策樹算法實例操演——基于ModelArts平臺(小白機器學習初體驗)
      相關文章
      小说专区亚洲春色校园| 亚洲成人免费网址| 亚洲精品无码AV人在线播放| 成人区精品一区二区不卡亚洲| 亚洲成在人线av| 国产亚洲一区二区三区在线观看| 亚洲一区二区三区免费| 精品国产人成亚洲区| 亚洲国产成人VA在线观看| 亚洲第一中文字幕| 亚洲精品无码不卡在线播HE| 久久精品国产亚洲香蕉| 国产亚洲午夜精品| 亚洲男女内射在线播放| 亚洲av无码国产精品夜色午夜| 亚洲av无码专区首页| 亚洲日韩国产AV无码无码精品| 日韩欧美亚洲国产精品字幕久久久| 亚洲 小说区 图片区 都市| 好看的电影网站亚洲一区| 亚洲大尺度无码无码专区| 亚洲国产日韩一区高清在线| 久久亚洲AV成人无码电影| 亚洲尹人香蕉网在线视颅| 亚洲精品在线免费观看视频| 亚洲AV一宅男色影视| 亚洲尹人九九大色香蕉网站| 亚洲特级aaaaaa毛片| 亚洲精品国产精品国自产网站| 国产精品亚洲专区在线观看| 亚洲熟妇自偷自拍另欧美| 亚洲av乱码一区二区三区按摩| jjzz亚洲亚洲女人| 亚洲午夜福利在线观看| 日本亚洲视频在线| 亚洲国产成人精品青青草原| 亚洲人成电影网站色| 亚洲av高清在线观看一区二区| 亚洲综合无码AV一区二区| 亚洲AV永久纯肉无码精品动漫| 亚洲男女性高爱潮网站|