舉報

會員
從零開始學ARM
最新章節:
17.2.3 舉例
本書主要介紹ARM開發的相關知識,詳細講解常用的ARM指令及如何基于ARM架構的外設編寫驅動程序,并分析了開源軟件U-Boot的啟動源代碼和網絡協議棧。本書第1~4章為基礎篇,主要介紹CPU與ARM、搭建環境、ARM編程、異常等;第5~13章為編程篇,主要介紹基于Exynos4412的常用外設的工作原理及驅動程序編寫等;第14~17章為應用篇,主要介紹開源軟件U-Boot的使用及啟動程序,并分析網卡DM9000AE的驅動和網絡協議棧;以及關于匯編的兩點補充。本書適合從事嵌入式開發的工程師和有一定計算機基礎和C語言編程經驗的初學者學習參考。
- 17.2.3 舉例 更新時間:2025-01-16 18:00:17
- 17.2.2 如何編寫位置無關碼
- 17.2.1 為什么需要位置無關碼
- 17.2 位置無關碼
- 17.1.4 繼續優化
- 17.1.3 文字池
- 17.1.2 使用結構體
- 17.1.1 定義多個全局變量
- 17.1 為什么使用結構體效率會高
- 第17章 關于匯編的兩點補充
- 16.5 U-Boot中的網絡協議棧
- 16.4.6 網卡注銷
- 16.4.5 數據的接收
- 16.4.4 數據的發送
- 16.4.3 網卡的初始化
- 16.4.2 相關結構體
- 16.4.1 網卡注冊
- 16.4 DM9000AE驅動分析
- 16.3.4 SROM初始化
- 16.3.3 配置SROM功能
- 16.3.2 寄存器SROM_BW和SROM_BC
- 16.3.1 SROM控制器概述
- 16.3 SROM 控制器
- 16.2.3 DM9000AE內部寄存器
- 16.2.2 引腳說明
- 16.2.1 DM9000AE概述
- 16.2 DM9000AE
- 16.1 網卡概述
- 第16章 網卡DM9000AE
- 15.2.2 U-Boot啟動詳解
- 15.2.1 U-Boot啟動程序流程
- 15.2 U-Boot啟動流程程序詳解
- 15.1.5 Ids文件
- 15.1.4 SD卡鏡像布局
- 15.1.3 啟動順序
- 15.1.2 Exynos 4412內存映射
- 15.1.1 U-Boot啟動Linux內核一般流程
- 15.1 內核啟動流程概述
- 第15章 U-Boot程序啟動分析
- 14.4.4 網絡燒寫U-Boot
- 14.4.3 通過SD卡啟動燒寫U-Boot
- 14.4.2 制作SD卡的步驟
- 14.4.1 燒寫腳本
- 14.4 制作SD卡
- 14.3.3 移植Flash
- 14.3.2 移植網卡驅動
- 14.3.1 實現串口輸出
- 14.3 移植硬件驅動
- 14.2.3 U-Boot源程序編譯
- 14.2.2 U-Boot源程序配置
- 14.2.1 U-Boot源程序簡介
- 14.2 U-Boot源程序
- 14.1.4 配置舉例
- 14.1.3 U-Boot常用命令
- 14.1.2 工作模式
- 14.1.1 U-Boot的特性
- 14.1 U-Boot概述
- 第14章 U-Boot
- 應用篇
- 13.4.9 MCP2515驅動程序實現
- 13.4.8 數據接收
- 13.4.7 數據發送
- 13.4.6 MCP2515初始化
- 13.4.5 SPI 指令集
- 13.4.4 SPI 協議模塊
- 13.4.3 結構框圖
- 13.4.2 MCP2515的特點
- 13.4.1 MCP2515簡介
- 13.4 MCP2515
- 13.3.4 收發數據流程
- 13.3.3 初始化流程
- 13.3.2 寄存器
- 13.3.1 參考電路
- 13.3 SPI的操作
- 13.2 Exynos 4412 SPI控制器
- 13.1.3 數據交換
- 13.1.2 極性和相位
- 13.1.1 SPI的特點
- 13.1 SPI基礎知識
- 第13章 SPI
- 12.3.4 程序實現
- 12.3.3 MPU6050內部寄存器
- 12.3.2 MPU6050參考電路
- 12.3.1 MPU6050
- 12.3 MPU6050及驅動程序編寫
- 12.2.5 I2C總線控制器寄存器
- 12.2.4 數據讀寫流程
- 12.2.3 數據讀寫格式
- 12.2.2 Exynos 4412 I2C總線接口的特點
- 12.2.1 Exynos 4412 I2C控制器概述
- 12.2 Exynos 4412 I2C控制器
- 12.1.3 數據傳輸格式
- 12.1.2 數據有效性
- 12.1.1 開始條件和停止條件
- 12.1 I2C總線
- 第12章 I2C
- 11.3.2 程序實現
- 11.3.1 參考電路
- 11.3 程序實現
- 11.2.4 A/D轉換時間計算
- 11.2.3 中斷組合器
- 11.2.2 ADC控制器寄存器
- 11.2.1 Exynos 4412 ADC控制器的特性
- 11.2 Exynos 4412 ADC控制器
- 11.1.2 脈沖編碼調制(PCM)
- 11.1.1 信號分類
- 11.1 信號基礎知識
- 第11章 ADC
- 10.2.3 程序實現
- 10.2.2 看門狗寄存器設置
- 10.2.1 看門狗軟件程序設計流程
- 10.2 驅動編寫
- 10.1.2 工作原理
- 10.1.1 看門狗模塊圖
- 10.1 Exynos 4412 看門狗
- 第10章 看門狗
- 9.4 程序實現
- 9.3 RTC的操作
- 9.2 RTC寄存器
- 9.1.4 晶體振蕩器
- 9.1.3 備用電池
- 9.1.2 RTC模塊
- 9.1.1 Exynos 4412 RTC的特性
- 9.1 Exynos 4412 RTC
- 第9章 RTC
- 8.3.4 移植printf
- 8.3.3 程序實現
- 8.3.2 寄存器
- 8.3.1 參考電路
- 8.3 UART的操作
- 8.2.3 時鐘源
- 8.2.2 UART內部功能模塊
- 8.2.1 UART的特性
- 8.2 Exynos 4412 UART控制器
- 8.1.2 UART數據幀格式
- 8.1.1 UART通信方式
- 8.1 UART概述
- 第8章 UART
- 7.3 輪詢方式
- 7.2.4 程序實現
- 7.2.3 寄存器
- 7.2.2 配置按鍵為中斷觸發方式
- 7.2.1 電路圖
- 7.2 按鍵驅動程序編寫
- 7.1.3 中斷處理
- 7.1.2 CPU接口
- 7.1.1 分發器
- 7.1 GIC
- 第7章 中斷
- 6.2.3 程序實現
- 6.2.2 寄存器
- 6.2.1 參考電路
- 6.2 蜂鳴器驅動程序編寫
- 6.1.3 PWM的工作步驟
- 6.1.2 Exynos 4412 PWM的特性
- 6.1.1 PWM基礎知識
- 6.1 Exynos 4412 PWM
- 第6章 PWM
- 5.2.3 燒寫程序
- 5.2.2 C語言程序實現
- 5.2.1 匯編程序
- 5.2 LED驅動程序編寫
- 5.1.3 如何操作GPIO
- 5.1.2 LED電路圖
- 5.1.1 Exynos 4412 GPIO的特性
- 5.1 GPIO
- 第5章 GPIO及LED
- 編程篇
- 4.4.5 獲取中斷號
- 4.4.4 同時執行跳轉指令并切換模式
- 4.4.3 舉例
- 4.4.2 bkpt指令
- 4.4.1 swi指令
- 4.4 軟中斷
- 4.3.2 中斷處理流程
- 4.3.1 中斷概念
- 4.3 中斷異常
- 4.2.5 異常恢復
- 4.2.4 異常處理的返回
- 4.2.3 保存執行現場
- 4.2.2 異常向量表
- 4.2.1 異常發生后硬件操作
- 4.2 異常處理
- 4.1 異常基礎知識
- 第4章 異常
- 3.12 C語言和匯編語言相互調用舉例
- 3.11 內聯匯編
- 3.10 ATPCS和AAPCS
- 3.9.6 編譯舉例
- 3.9.5 elf與bin文件
- 3.9.4 編譯選項
- 3.9.3 程序編譯過程
- 3.9.2 交叉編譯工具命名規則
- 3.9.1 交叉編譯工具
- 3.9 GNU程序的編譯
- 3.8.4 雜項偽操作
- 3.8.3 .if.else.end if
- 3.8.2 匯編控制偽操作
- 3.8.1 數據定義偽操作
- 3.8 偽操作
- 3.7.4 分段
- 3.7.3 語句格式
- 3.7.2 標號symbol(或label)
- 3.7.1 MDK書寫風格與GNU書寫風格
- 3.7 GNU書寫風格
- 3.6 ARM尋址方式
- 3.5.4 ldrh指令
- 3.5.3 ldrb指令
- 3.5.2 str指令
- 3.5.1 ldr指令
- 3.5 訪問外部寄存器指令
- 3.4.3 綜合實例
- 3.4.2 msr指令
- 3.4.1 mrs指令
- 3.4 訪問程序狀態寄存器指令
- 3.3 跳轉指令
- 3.2.5 運算指令
- 3.2.4 tst條件指令
- 3.2.3 cmp比較指令
- 3.2.2 移位操作
- 3.2.1 mov指令
- 3.2 數據處理指令
- 3.1 ARM指令格式
- 第3章ARM編程
- 2.3 交叉編譯工具安裝
- 2.2.2 安裝ubuntu
- 2.2.1 安裝VMware Workstation
- 2.2 編譯環境搭建
- 2.1.5 如何debug程序
- 2.1.4 編譯程序
- 2.1.3 創建工程
- 2.1.2 安裝KEIL
- 2.1.1 KEIL、μVision、MDK之間的關系
- 2.1 KEIL軟件安裝
- 第2章 搭建環境
- 1.3 SoC
- 1.2.3 ARM處理器
- 1.2.2 ARM架構
- 1.2.1 ARM的發展史
- 1.2 ARM
- 1.1.4 指令的運行
- 1.1.3 CPU的組成
- 1.1.2 計算機結構
- 1.1.1 CPU概述
- 1.1 CPU
- 第1章 CPU與ARM
- 基礎篇
- 前言
- 內容提要
- 版權信息
- 封面
- 封面
- 版權信息
- 內容提要
- 前言
- 基礎篇
- 第1章 CPU與ARM
- 1.1 CPU
- 1.1.1 CPU概述
- 1.1.2 計算機結構
- 1.1.3 CPU的組成
- 1.1.4 指令的運行
- 1.2 ARM
- 1.2.1 ARM的發展史
- 1.2.2 ARM架構
- 1.2.3 ARM處理器
- 1.3 SoC
- 第2章 搭建環境
- 2.1 KEIL軟件安裝
- 2.1.1 KEIL、μVision、MDK之間的關系
- 2.1.2 安裝KEIL
- 2.1.3 創建工程
- 2.1.4 編譯程序
- 2.1.5 如何debug程序
- 2.2 編譯環境搭建
- 2.2.1 安裝VMware Workstation
- 2.2.2 安裝ubuntu
- 2.3 交叉編譯工具安裝
- 第3章ARM編程
- 3.1 ARM指令格式
- 3.2 數據處理指令
- 3.2.1 mov指令
- 3.2.2 移位操作
- 3.2.3 cmp比較指令
- 3.2.4 tst條件指令
- 3.2.5 運算指令
- 3.3 跳轉指令
- 3.4 訪問程序狀態寄存器指令
- 3.4.1 mrs指令
- 3.4.2 msr指令
- 3.4.3 綜合實例
- 3.5 訪問外部寄存器指令
- 3.5.1 ldr指令
- 3.5.2 str指令
- 3.5.3 ldrb指令
- 3.5.4 ldrh指令
- 3.6 ARM尋址方式
- 3.7 GNU書寫風格
- 3.7.1 MDK書寫風格與GNU書寫風格
- 3.7.2 標號symbol(或label)
- 3.7.3 語句格式
- 3.7.4 分段
- 3.8 偽操作
- 3.8.1 數據定義偽操作
- 3.8.2 匯編控制偽操作
- 3.8.3 .if.else.end if
- 3.8.4 雜項偽操作
- 3.9 GNU程序的編譯
- 3.9.1 交叉編譯工具
- 3.9.2 交叉編譯工具命名規則
- 3.9.3 程序編譯過程
- 3.9.4 編譯選項
- 3.9.5 elf與bin文件
- 3.9.6 編譯舉例
- 3.10 ATPCS和AAPCS
- 3.11 內聯匯編
- 3.12 C語言和匯編語言相互調用舉例
- 第4章 異常
- 4.1 異常基礎知識
- 4.2 異常處理
- 4.2.1 異常發生后硬件操作
- 4.2.2 異常向量表
- 4.2.3 保存執行現場
- 4.2.4 異常處理的返回
- 4.2.5 異常恢復
- 4.3 中斷異常
- 4.3.1 中斷概念
- 4.3.2 中斷處理流程
- 4.4 軟中斷
- 4.4.1 swi指令
- 4.4.2 bkpt指令
- 4.4.3 舉例
- 4.4.4 同時執行跳轉指令并切換模式
- 4.4.5 獲取中斷號
- 編程篇
- 第5章 GPIO及LED
- 5.1 GPIO
- 5.1.1 Exynos 4412 GPIO的特性
- 5.1.2 LED電路圖
- 5.1.3 如何操作GPIO
- 5.2 LED驅動程序編寫
- 5.2.1 匯編程序
- 5.2.2 C語言程序實現
- 5.2.3 燒寫程序
- 第6章 PWM
- 6.1 Exynos 4412 PWM
- 6.1.1 PWM基礎知識
- 6.1.2 Exynos 4412 PWM的特性
- 6.1.3 PWM的工作步驟
- 6.2 蜂鳴器驅動程序編寫
- 6.2.1 參考電路
- 6.2.2 寄存器
- 6.2.3 程序實現
- 第7章 中斷
- 7.1 GIC
- 7.1.1 分發器
- 7.1.2 CPU接口
- 7.1.3 中斷處理
- 7.2 按鍵驅動程序編寫
- 7.2.1 電路圖
- 7.2.2 配置按鍵為中斷觸發方式
- 7.2.3 寄存器
- 7.2.4 程序實現
- 7.3 輪詢方式
- 第8章 UART
- 8.1 UART概述
- 8.1.1 UART通信方式
- 8.1.2 UART數據幀格式
- 8.2 Exynos 4412 UART控制器
- 8.2.1 UART的特性
- 8.2.2 UART內部功能模塊
- 8.2.3 時鐘源
- 8.3 UART的操作
- 8.3.1 參考電路
- 8.3.2 寄存器
- 8.3.3 程序實現
- 8.3.4 移植printf
- 第9章 RTC
- 9.1 Exynos 4412 RTC
- 9.1.1 Exynos 4412 RTC的特性
- 9.1.2 RTC模塊
- 9.1.3 備用電池
- 9.1.4 晶體振蕩器
- 9.2 RTC寄存器
- 9.3 RTC的操作
- 9.4 程序實現
- 第10章 看門狗
- 10.1 Exynos 4412 看門狗
- 10.1.1 看門狗模塊圖
- 10.1.2 工作原理
- 10.2 驅動編寫
- 10.2.1 看門狗軟件程序設計流程
- 10.2.2 看門狗寄存器設置
- 10.2.3 程序實現
- 第11章 ADC
- 11.1 信號基礎知識
- 11.1.1 信號分類
- 11.1.2 脈沖編碼調制(PCM)
- 11.2 Exynos 4412 ADC控制器
- 11.2.1 Exynos 4412 ADC控制器的特性
- 11.2.2 ADC控制器寄存器
- 11.2.3 中斷組合器
- 11.2.4 A/D轉換時間計算
- 11.3 程序實現
- 11.3.1 參考電路
- 11.3.2 程序實現
- 第12章 I2C
- 12.1 I2C總線
- 12.1.1 開始條件和停止條件
- 12.1.2 數據有效性
- 12.1.3 數據傳輸格式
- 12.2 Exynos 4412 I2C控制器
- 12.2.1 Exynos 4412 I2C控制器概述
- 12.2.2 Exynos 4412 I2C總線接口的特點
- 12.2.3 數據讀寫格式
- 12.2.4 數據讀寫流程
- 12.2.5 I2C總線控制器寄存器
- 12.3 MPU6050及驅動程序編寫
- 12.3.1 MPU6050
- 12.3.2 MPU6050參考電路
- 12.3.3 MPU6050內部寄存器
- 12.3.4 程序實現
- 第13章 SPI
- 13.1 SPI基礎知識
- 13.1.1 SPI的特點
- 13.1.2 極性和相位
- 13.1.3 數據交換
- 13.2 Exynos 4412 SPI控制器
- 13.3 SPI的操作
- 13.3.1 參考電路
- 13.3.2 寄存器
- 13.3.3 初始化流程
- 13.3.4 收發數據流程
- 13.4 MCP2515
- 13.4.1 MCP2515簡介
- 13.4.2 MCP2515的特點
- 13.4.3 結構框圖
- 13.4.4 SPI 協議模塊
- 13.4.5 SPI 指令集
- 13.4.6 MCP2515初始化
- 13.4.7 數據發送
- 13.4.8 數據接收
- 13.4.9 MCP2515驅動程序實現
- 應用篇
- 第14章 U-Boot
- 14.1 U-Boot概述
- 14.1.1 U-Boot的特性
- 14.1.2 工作模式
- 14.1.3 U-Boot常用命令
- 14.1.4 配置舉例
- 14.2 U-Boot源程序
- 14.2.1 U-Boot源程序簡介
- 14.2.2 U-Boot源程序配置
- 14.2.3 U-Boot源程序編譯
- 14.3 移植硬件驅動
- 14.3.1 實現串口輸出
- 14.3.2 移植網卡驅動
- 14.3.3 移植Flash
- 14.4 制作SD卡
- 14.4.1 燒寫腳本
- 14.4.2 制作SD卡的步驟
- 14.4.3 通過SD卡啟動燒寫U-Boot
- 14.4.4 網絡燒寫U-Boot
- 第15章 U-Boot程序啟動分析
- 15.1 內核啟動流程概述
- 15.1.1 U-Boot啟動Linux內核一般流程
- 15.1.2 Exynos 4412內存映射
- 15.1.3 啟動順序
- 15.1.4 SD卡鏡像布局
- 15.1.5 Ids文件
- 15.2 U-Boot啟動流程程序詳解
- 15.2.1 U-Boot啟動程序流程
- 15.2.2 U-Boot啟動詳解
- 第16章 網卡DM9000AE
- 16.1 網卡概述
- 16.2 DM9000AE
- 16.2.1 DM9000AE概述
- 16.2.2 引腳說明
- 16.2.3 DM9000AE內部寄存器
- 16.3 SROM 控制器
- 16.3.1 SROM控制器概述
- 16.3.2 寄存器SROM_BW和SROM_BC
- 16.3.3 配置SROM功能
- 16.3.4 SROM初始化
- 16.4 DM9000AE驅動分析
- 16.4.1 網卡注冊
- 16.4.2 相關結構體
- 16.4.3 網卡的初始化
- 16.4.4 數據的發送
- 16.4.5 數據的接收
- 16.4.6 網卡注銷
- 16.5 U-Boot中的網絡協議棧
- 第17章 關于匯編的兩點補充
- 17.1 為什么使用結構體效率會高
- 17.1.1 定義多個全局變量
- 17.1.2 使用結構體
- 17.1.3 文字池
- 17.1.4 繼續優化
- 17.2 位置無關碼
- 17.2.1 為什么需要位置無關碼
- 17.2.2 如何編寫位置無關碼
- 17.2.3 舉例 更新時間:2025-01-16 18:00:17