日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8.裸板--C语言下的寄存器的读写置位清零操作

發布時間:2023/12/31 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8.裸板--C语言下的寄存器的读写置位清零操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從CPU的角度來看,外設的寄存器跟通用寄存器操作一樣,對它們的地址進行讀寫移位等操作即可進行配置讀取寫入等動作。

通用寄存器有15個

寄存器名字Reg#APCS意義
R0a1工作寄存器
R1a2"
R2a3"
R3a4"
R4v1必須保護
R5v2"
R6v3"
R7v4"
R8v5"
R9v6"
R10sl棧限制
R11fp楨指針
R12ip內部過程調用寄存器
R13sp棧指針
R14lr連接寄存器
R15pc程序計數器

假設某外設地址為0x56000050。(外設地址可查芯片手冊)

1.匯編模式的操作

讀值:

mov r0,r1??

mov r0,立即數

ldr?

寫值:

str?

C語言下,對地址進讀寫是通過指針來操作,地址可查芯片手冊獲得。

C語言下要對r0~r15進行操作,需要插入匯編。

?#define UART_BASE_ADRS (0x56000050)?????/* 串口的基地址 */
?#define UART_RHR *(volatile unsigned char *)(UART_BASE_ADRS + 1)??/* 數據接受寄存器 */
#define UART_THR *(volatile unsigned char *)(UART_BASE_ADRS + 2) ?/* 數據發送寄存器 */
UART_BASE_ADRS =配置值;
UART_THR = ch; /* 發送數據 */
ch = UART_RHR; /* 接收數據 */

即:

TYPE *p=addr;

*p=vale;

把vale寫入地址addr的內存,寫入sizeof(TYPE)字節

寄存器置位:UART_BASE_ADRS|=(1<<n)|(1<<m);

寄存器清零:UART_BASE_ADRS&=~((1<<n)|(1<<m));

其他:

r0-r3?用作傳入函數參數,傳出函數返回值。在子程序調用之間,可以將 r0-r3 用于任何用途。

被調用函數在返回之前不必恢復 r0-r3。如果調用函數需要再次使用 r0-r3 的內容,則它必須保留這些內容。

r4-r11?被用來存放函數的局部變量。如果被調用函數使用了這些寄存器,它在返回之前必須恢復這些寄存器的值。

r12?是內部調用暫時寄存器 ip。它在過程鏈接膠合代碼(例如,交互操作膠合代碼)中用于此角色。

在過程調用之間,可以將它用于任何用途。被調用函數在返回之前不必恢復 r12。

r13?是棧指針 sp。它不能用于任何其它用途。sp 中存放的值在退出被調用函數時必須與進入時的值相同。

r14?是鏈接寄存器 lr。如果您保存了返回地址,則可以在調用之間將 r14 用于其它用途,程序返回時要恢復

r15?是程序計數器 PC。它不能用于任何其它用途。(程序計數器是用于存放下一條指令所在單元的地址的地方

注意:在中斷程序中,所有的寄存器都必須保護

總結

以上是生活随笔為你收集整理的8.裸板--C语言下的寄存器的读写置位清零操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。