第001節:輔線1_硬件知識_LED原理圖
實現點亮LED的步驟:
1.看原理圖,確定控制led的引腳
通過主芯片使用引腳輸出:3.3V點亮led;0V熄滅led。
-接法:
引腳驅動能力不足:使用三極管,
接法介紹:
-接法1:
-接法2:
2.看主芯片手冊,確定如何設置/控制引腳
3.寫程序
第002節:輔線1_硬件知識_s3c2440啟動流程與GPIO操作
知識點:
網絡net,同名的net表示連接在一起
網絡中的n,常表示低電平有效
怎么讓GPF4輸出1/0
先配置為輸出引腳
設置狀態
設置GPFCON[9:8]=0b01(0b表示二進制,9為0,8為1),GPF4配置為輸出
設置GPFDAT[4]=1:輸出高電平,led熄滅
設置GPFDAT[4]=0:輸出低電平,led點亮
S3C2440框架與啟動過程:
S3C2440框架圖:
啟動過程:大多數ARM芯片從0地址啟動
Nor啟動時候,Nor Flash基地址為0;片內RAM地址為0x4000,0000
cpu讀出Nor上第一個指令(前4字節),執行,
cpu繼續讀出其他指令執行。
Nand啟動,片內4kRAM基地址為0; Nor Flash不可以訪問
2440硬件把Nand前4k內容復制到片內RAM,
然后cpu從0地址取出第一條指令執行。
第003節:編寫第一個程序點亮LED
怎么讓GPF4輸出1/0的方法:
先配置為輸出引腳
設置狀態
設置GPFCON[9:8]=0b01(0b表示二進制:9為0,8為1),GPF4配為輸出
-==>把0x100寫入GPFCON,即寫到地址0x5600,0050上
設置GPFDAT[4]=1:輸出高電平,led熄滅
-==>把0x10寫到地址0x5600,0054上
設置GPFDAT[4]=0:輸出低電平,led點亮
-==>把0寫到地址0x5600,0054上
補充知識:
幾條匯編代碼:
LDR(load):讀內存命令,
LDR RO,[R1]:假設R1的值為x,則讀取地址x上的數據(4字節),保存到R0中
STR(store):寫內存命令
STR R0,R[1]:假設R1的值為x,把R0的值寫入地址x(4字節)
B:跳轉
MOV(move):
MOV R0, R1:把R1的值賦給R0,即R0=R1
MOV R0,#0x100:即把R0=0x100
LDR R0, =0X12345678:偽指令,它會被拆分為幾條真正的RAM指令
引入偽指令, “LDR R0,=任意值”的原因:
-ARM指令一共32位,會有部分字節表示指令,某些存儲R0,其余剩余的不足32位,不能表示任意值,只能表示簡單值(被稱為立即數)。
安裝arm-linux-gcc注意事項以及相關重點:
安裝32位庫
如何判斷ubuntu的版本
第004節:匯編與機器碼
CPU寄存器及其別名:
詳細介紹:
program counter:程序計數器=當前指令+8
流水線:當前執行地址A的指令,已經在對地址A+4的指令進行譯碼,已經在讀取地址A+8(即PC的值)的指令
反匯編指令理解:
0: e59f1014 ldr r1, [pc, #20] ; 1c r1=[pc+20]=[8+20]=[0x1c]=0x56000050 8: e5810000 str r0, [r1] 把r0即0x100,寫入r1對應的內存,0x100–>[0x56000050]:即GPFCON寄存器 c: e59f100c ldr r1, [pc, #12] ; 20 r1=[pc+12]=[0xc+8+12]=[32]=[0x20]=0x56000054:即GPFDAT寄存器 GPFCON/GPFDAT在CPU中,都是作為內存 完整代碼: led_on.elf: file format elf32-littlearm Disassembly of section .text: 00000000 <_start>: 0: e59f1014 ldr r1, [pc, #20] ; 1c 4: e3a00c01 mov r0, #256 ; 0x100 8: e5810000 str r0, [r1] c: e59f100c ldr r1, [pc, #12] ; 20 10: e3a00000 mov r0, #0 14: e5810000 str r0, [r1] 00000018 18: eafffffe b 18 1c: 56000050 undefined instruction 0x56000050 20: 56000054 undefined instruction 0x56000054 Disassembly of section .ARM.attributes: 00000000 <.ARM.attributes>: 0: 00001941 andeq r1, r0, r1, asr #18 4: 61656100 cmnvs r5, r0, lsl #2 8: 01006962 tsteq r0, r2, ror #18 c: 0000000f andeq r0, r0, pc 10: 00543405 subseq r3, r4, r5, lsl #8 14: 01080206 tsteq r8, r6, lsl #4 18: Address 0x00000018 is out of bounds. 練習題: 修改len_on.s到點亮LED2 直接修改led_on.bin點亮LED2 mov指令機器碼: 4: e3a00c01 mov r0, #256 ; 0x100 故:當代碼為mov r0,#0x400,即修改最后的12位立即數(=immed_8循環右移(2*rotate)位) 12位立即數中高4位,表示rotate,低8位:immed_8 具體介紹: 舉一反三: 第005、006節:編程知識_進制-字節序 進制: 如何快四轉化2/8/16進制: 8421 0b開頭:2進制 0開頭:8進制 0x開頭:16進制 字節序: 低位存放低地址:小字節序(little endian) 高位存在低地址:大字節序(big endian) 位操作: 移位: 左移:int a=0x123; int b=a<<2=? -通過8421來轉化為二進制,即a=0001,0010,0011,故b=0100,1000,1100=8421=0x48C=0x123*(2^2)=0x123*4 右移:int a=0x123; int b=a>>2=? -故a=0001,0010,0011; 則b=00,0100,1000=0x48=0x123/4=0x48 取反: 原來為0的位變為1;原來為1的位變為0 int a=0x123; int b=~a=0xfffffedc??? 位與: c=a&b 1 and 1 = 1; 1 and 0 = 0; 0 and 1 = 0; o and 0 = 0; 位或:c=a|b 1 or 1 = 1; 1 or 0 = 1; 0 or 1 = 1; o or 0 = 0; 置位: int a=0x123,把bit7,8置位 int b=a|(1<<7)|(1<<8) 清位: int a=0x123,把bit7,8清除 int b=a&(~(1<<7))&(~(1<<8)) 第007節:編寫C程序控制LED C指針操作: 1.所有的變量在內存中都有一塊區域 可以通過變量/指針來操作內存 第008節: 幾條匯編代碼: LDR(load):讀內存命令, LDR RO,[R1]:假設R1的值為x,則讀取地址x上的數據(4字節),保存到R0中 STR(store):寫內存命令 STR R0,R[1]:假設R1的值為x,把R0的值寫入地址x(4字節) B:跳轉 MOV(move): MOV R0, R1:把R1的值賦給R0,即R0=R1 MOV R0,#0x100:即把R0=0x100 LDR R0, =0X12345678:偽指令,它會被拆分為幾條真正的RAM指令 引入偽指令, “LDR R0,=任意值”的原因: -ARM指令一共32位,會有部分字節表示指令,某些存儲R0,其余剩余的不足32位,不能表示任意值,只能表示簡單值(被稱為立即數)。 add: add r0,r1, #4==>r0=r1+4 sub: sub r0, r1,#4==>r0=r1-4 sub r0, r1,r2==>r0=r1-r2 BL(branch and link): bl * * *: -跳轉到* * *; -并將返回地址(下一條指令的地址)保存在lr寄存器中 ldm(many):讀內存,寫入多個寄存器 ldmia: stm: 把多個寄存器的值寫入內存 stmdb: 過后增加(Increment After)、預先增加(Increment Before)、過后減少(Decrement After)、預先減少(Decrement Before)。 舉例: 第009節:解析C程序的內部機制
上一篇:交叉編譯工具的使用說明
下一篇:第008課_第1個ARM落版程序及引申
推薦閱讀
史海拾趣
ABCircuits公司始終堅信人才是企業發展的核心動力。因此,公司在人才招聘和培養方面投入了大量資源。通過與高校和研究機構的合作,ABCircuits吸引了一批批優秀的科研人才加入公司。同時,公司還建立了完善的培訓體系,為員工提供持續的學習和成長機會。這些人才為公司帶來了源源不斷的創新動力,推動了公司的快速發展。
隨著全球對環保問題的日益關注,EPIGAP公司也開始注重綠色環保和可持續發展。公司積極采用環保材料和生產工藝,減少生產過程中的污染物排放。同時,EPIGAP還加大了對可再生能源的研發力度,推動公司向綠色、低碳、循環發展的方向邁進。這一戰略不僅符合全球環保趨勢,也為公司贏得了良好的社會聲譽。
為了進一步提升技術水平和市場競爭力,Daniel Woodhead公司開始尋求與國際知名企業的合作。公司與多家國際知名半導體制造商和電子產品生產商建立了戰略合作關系,共同研發新技術、新產品。這些合作不僅為公司帶來了先進的技術和理念,還拓寬了公司的國際視野和市場渠道。
隨著公司規模的擴大,Chino-Excel公司開始實施全球化戰略布局。公司先后在多個國家和地區設立研發中心和生產基地,以充分利用當地資源和市場優勢。同時,公司加強與全球合作伙伴的緊密合作,共同開發新產品和技術,進一步鞏固了在全球市場的地位。
面對日益嚴峻的環境問題,Chino-Excel公司積極倡導環保理念,將綠色生產貫穿于整個產業鏈。公司采用環保材料和節能技術,降低產品生產和運營過程中的能耗和排放。同時,公司還積極參與環保公益活動,推動整個行業向更加環保、可持續的方向發展。
CCC深知產品質量對于企業生存和發展的重要性。因此,公司始終將質量管理放在首位,建立了嚴格的質量檢測體系和售后服務體系。從原材料采購到產品生產、再到售后服務,CCC都嚴格按照質量標準進行操作,確保每一件產品都符合客戶的要求。這種對質量的執著追求讓CCC贏得了客戶的信賴和口碑相傳。
Linux系統下新增一塊500G磁盤,這個磁盤是用于嵌入式硬盤錄像機錄像的磁盤,我需要把里面的內容COPY出來,但是無法掛載這塊磁盤。用fdisk -l出現如下提示: Disk /dev/sda: 500.1G,500107862016 bytes 255 heads,63 sectors/track,60801 cylind ...… 查看全部問答∨ |
100分請您提供WinCEPB50-061231-Product-Update-Rollup-Armv4I.msi,GOOGLE至凌晨沒找著 如題,多謝。 我已經打了了: WinCEPB50-081231-Product-Update-Rollup-Armv4I.msi WinCEPB50-090131-2009M01-Armv4I.msi WinCEPB50-090228-2009M02-Armv4I.msi 結果編譯時,發現WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\SDCARD\\SDBUSDRIVER ...… 查看全部問答∨ |
請問各位: 1、WINCE50下是不是分物理中斷號和邏輯中斷號??物理中斷號就是定義的跟硬件開關中斷相關的中斷號,邏輯中斷號是物理中斷號對應的由系統調用的中斷號???這個理解對不對??? 2、BSP中SD驅動的注冊表信 ...… 查看全部問答∨ |
|
主機弄好了TFTP-SERVER,目標板默認啟動無TFTP服務,查了下幫助是用TFTPBOOT開啟 MINICOM登入后,輸入TFTPBOOT后,目標板IP是192。168。1。134 SERVER地址是192。168。1。106 但是連接不上總是TRY AGAIN,我把主機地址改為192。168。1。106也連 ...… 查看全部問答∨ |
sql ce2.0用rda連接sql server,出現問題,在線等 請教一個問題,我用rda連接sql server ,但出現以下錯誤: 未處理的“System.Data.SqlServerCe.SqlCeException”類型的異常出現在 System.Data.SqlServerCe.dll 中。 我是C# 2003、sql server 2000、Pda是win mobile 5.0 我的代碼如下: string ...… 查看全部問答∨ |