国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARM day5 (點燈實驗 匯編&C)

這篇具有很好參考價值的文章主要介紹了ARM day5 (點燈實驗 匯編&C)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

匯編

.text 
.global _start
_start: 
	/**********LED1點燈**************/
	/**********RCC草節(jié)初始化**************/

	//1.通過RCC_MP_AHB4ENSETR寄存器使能GPIOE組控制器0x50000A28[4] = 1
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0x1 << 4)
	str r1,[r0]

	//1.通過RCC_MP_AHB4ENSETR寄存器使能GPIOF組控制器0x50000A28[5] = 1
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0x1 << 5)
	str r1,[r0]

	/*********GPIO章節(jié)初始化*************/

LED1_INIT:

	@1.通過GPIOE_MODER寄存器設置PE10引腳為輸出模式0x50006000[21:20] = 01
	ldr r0,=0x50006000
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 20))
	orr r1,r1,#(0x1 << 20)
	str r1,[r0]

	@2.通過GPIOE_OTYPER寄存器設置PE10引腳為推挽輸出類型0x50006004[10]= 0
	ldr r0,=0x50006004
	ldr r1,[r0]
	and r1,r1,#(~(0x1 << 10))
	str r1,[r0]


	@3.通過GPIOE_OSPBEDR寄存器設置PE10引腳為低速輸出模式0x50006008[21:20] = 00
	ldr r0,=0x50006008
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 20))
	str r1,[r0]


	@4.通過GPIOE_PUPDR寄存器設置PE10引腳禁止上下拉電阻0x5000600C[21:20] = 00
	ldr r0,=0x5000600c
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 20))
	str r1,[r0]

LED2_INIT:

	@1.通過GPIOF_MODER寄存器設置PF10引腳為輸出模式0x50007000[21:20] = 01
	ldr r0,=0x50007000
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 20))
	orr r1,r1,#(0x1 << 20)
	str r1,[r0]

	@2.通過GPIOF_OTYPER寄存器設置PF10引腳為推挽輸出類型0x50007004[10]= 0
	ldr r0,=0x50007004
	ldr r1,[r0]
	and r1,r1,#(~(0x1 << 10))
	str r1,[r0]


	@3.通過GPIOF_OSPBEDR寄存器設置PF10引腳為低速輸出模式0x50007008[21:20] = 00
	ldr r0,=0x50007008
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 20))
	str r1,[r0]


	@4.通過GPIOF_PUPDR寄存器設置PF10引腳禁止上下拉電阻0x5000700C[21:20] = 00
	ldr r0,=0x5000700c
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 20))
	str r1,[r0]
	
LED3_INIT:

	@1.通過GPIOE_MODER寄存器設置PE8引腳為輸出模式0x50006000[17:16] = 01
	ldr r0,=0x50006000
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 16))
	orr r1,r1,#(0x1 << 16)
	str r1,[r0]

	@2.通過GPIOE_OTYPER寄存器設置PE8引腳為推挽輸出類型0x50006004[8]= 0
	ldr r0,=0x50006004
	ldr r1,[r0]
	and r1,r1,#(~(0x1 << 8))
	str r1,[r0]


	@3.通過GPIOE_OSPBEDR寄存器設置PE8引腳為低速輸出模式0x50006008[17:16] = 00
	ldr r0,=0x50006008
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 16))
	str r1,[r0]


	@4.通過GPIOE_PUPDR寄存器設置PE8引腳禁止上下拉電阻0x5000600C[17:16] = 00
	ldr r0,=0x5000600c
	ldr r1,[r0]
	and r1,r1,#(~(0x3 << 16))
	str r1,[r0]
loop:
	bl LED1_ON
	bl delay_1s
	bl LED1_OFF
	
	bl LED2_ON
	bl delay_1s
	bl LED2_OFF

	bl LED3_ON
	bl delay_1s
	bl LED3_OFF



	b loop



LED1_ON:
	@通過GPIOE_ODR寄存器設置PE10引腳輸出高電平0x50006014[10] = 1
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1 << 10)
	str r1,[r0]
	mov pc,lr


LED1_OFF:

	@通過GPIOE_ODR寄存器設置PE10引腳輸出低電平0x50006014[10] = 0
	ldr r0,=0x50006014
	ldr r1,[r0]
	and r1,r1,#(~(0x1 << 10))
	str r1,[r0]
	mov pc,lr


LED2_ON:
	@通過GPIOF_ODR寄存器設置PF10引腳輸出高電平0x50007014[10] = 1
	ldr r0,=0x50007014
	ldr r1,[r0]
	orr r1,r1,#(0x1 << 10)
	str r1,[r0]
	mov pc,lr


LED2_OFF:

	@通過GPIOF_ODR寄存器設置PF10引腳輸出低電平0x50007014[10] = 0
	ldr r0,=0x50007014
	ldr r1,[r0]
	and r1,r1,#(~(0x1 << 10))
	str r1,[r0]
	mov pc,lr


LED3_ON:
	@通過GPIOE_ODR寄存器設置PE8引腳輸出高電平0x50006014[8] = 1
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1 << 8)
	str r1,[r0]
	mov pc,lr


LED3_OFF:

	@通過GPIOE_ODR寄存器設置PE8引腳輸出低電平0x50006014[8] = 0
	ldr r0,=0x50006014
	ldr r1,[r0]
	and r1,r1,#(~(0x1 << 8))
	str r1,[r0]
	mov pc,lr

	@ 大概1s的延時函數
delay_1s:
mov r3, #0x10000000
mm:
cmp r3, #0
subne r3, r3, #1
bne mm
mov pc, lr


.end

C語言

led.h

#ifndef __LED_H__
#define __LED_H__

//聲明一個結構體
typedef struct pio
{
	unsigned int MODER;   //00
	unsigned int OTYPER;  //04
	unsigned int OSPEEDR; //08
	unsigned int PUPDR;   //0C
	unsigned int IDR;     //10
	unsigned int ODR;     //14
}gpio_t;

#define GPIOE ((volatile gpio_t*)0x50006000)
#define GPIOF ((volatile gpio_t*)0x50007000)


void led1_init();
void LED1_on();
void led1_off();


void led2_init();
void LED2_on();
void led2_off();


void led3_init();
void LED3_on();
void led3_off();

#endif

led.c

#include "led.h"

void led1_init()
{
	GPIOE->MODER &= (~(0x3 << 20));
	GPIOE->MODER |= (0x1 << 20);
	GPIOE->OTYPER &=(~(0x1 << 10));
	GPIOE->OSPEEDR &= (~(0x3 << 20));
	GPIOE->PUPDR &= (~(0X3 << 20));
}

void LED1_on()
{

	GPIOE->ODR |= (0x1 << 10);
}

void led1_off()
{
	GPIOE->ODR &= (~(0x1 << 10));
}



void led2_init()
{
	GPIOF->MODER &= (~(0x3 << 20));
	GPIOF->MODER |= (0x1 << 20);
	GPIOF->OTYPER &=(~(0x1 << 10));
	GPIOF->OSPEEDR &= (~(0x3 << 20));
	GPIOF->PUPDR &= (~(0X3 << 20));
}

void LED2_on()
{
	GPIOF->ODR |= (0x1 << 10);
}

void led2_off()
{

	GPIOF->ODR &= (~(0x1 << 10));
}




void led3_init()
{
	GPIOE->MODER &= (~(0x3 << 16));
	GPIOE->MODER |= (0x1 << 16);
	GPIOE->OTYPER &=(~(0x1 << 8));
	GPIOE->OSPEEDR &= (~(0x3 << 16));
	GPIOE->PUPDR &= (~(0X3 << 16));

}

void LED3_on()
{

	GPIOE->ODR |= (0x1 << 8);
}

void led3_off()
{

	GPIOE->ODR &= (~(0x1 << 8));
}



main.c文章來源地址http://www.zghlxwxcb.cn/news/detail-517345.html

#include "led.h"

extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}


int main()
{

	*(volatile unsigned int *)0x50000A28 |= (0x3 << 4);

	led1_init(); // LED燈初始化
	led2_init();
	led3_init();
	while(1)
	{
		LED1_on();
		delay_ms(500);
		led1_off();
		LED2_on();
		delay_ms(500);
		led2_off();
		LED3_on();
		delay_ms(500);
		led3_off();

	}
	return 0;
}

到了這里,關于ARM day5 (點燈實驗 匯編&C)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • ARM day5、day6 硬件編程

    ARM day5、day6 硬件編程

    fs4412? sd卡? 串口線? 電源?? ? ? ? ? 點燈(亮 or 滅) ? ? ? ? 2.1 外設原理圖 devboard? ? ? ? ? ? ? ? ? 查找LED2-CHG_COK(核心板) ? ? ? ? 2.2 核心板原理圖 coreboard ? ? ? ? ? ? ? ? 查找CHG_COK- XEINT23/KP_ROW7/ALV_DBG19/GPX2_7 ? ? ? ? 2.3 看芯片手冊 ? ? ? ? ? ? ? ? GPIO控制(第六

    2024年01月19日
    瀏覽(19)
  • Keil MDK配置ARM匯編/C語言混合開發(fā)環(huán)境

    Keil MDK配置ARM匯編/C語言混合開發(fā)環(huán)境

    1. 安裝Keil MDK 安裝方法這里不再說明,懂得都懂!?? 2. 安裝ARM開發(fā)包 在Keil MDK5之后,不再原生支持ARM7/9,需要自行安裝軟件包,鏈接在這,注意安裝與自己MDK版本對應的那個包 我的版本是5.18,下載之后傻瓜式安裝,因為它會自動檢測你MDK所在的位置。 3. 新建工程 注意:選

    2024年02月02日
    瀏覽(28)
  • ARM day2、day3 匯編

    ARM day2、day3 匯編

    @ 注釋 # 注釋(放在行首表示注釋一行) /*? ? */ 注釋 #+數字 立即數 : 一種標號(比如main:? ? ? ? loop:) .text? ? ? ? .end+換行 固定格式 ARM指令構成 ARM 指令包含操作碼和一些其他的信息,只剩下8 位存放數據 具體來說,一個 ARM 指令通常由以下部分組成: 操作碼(Opcode)

    2024年01月19日
    瀏覽(25)
  • ARM day4 匯編及硬件編程

    ARM day4 匯編及硬件編程

    load -- 加載 讀 store -- 存儲 寫? 在ARM 架構下, 數據從內存到cpu 直接的移動只能通過 LDR/STR來完成? ? ? mov 只能在寄存器之間移動數據 ,或把立即數移動到寄存器 ,并且數據長度不能超過 8 位 str ?r2, ?[r0] ? //把r2 的數據 ?存儲(寫)到 r0 地址 ? ? ?*((int *) r0) ?= r2 往

    2024年01月20日
    瀏覽(19)
  • ARM匯編語言(2)

    ARM匯編語言是一種低級別的計算機指令集架構(ISA)語言,它是ARM處理器上的一種指令集架構,用于編寫底層的系統(tǒng)軟件,例如操作系統(tǒng)、驅動程序和嵌入式系統(tǒng)應用程序。 ARM匯編語言使用基于寄存器的指令集,其中指令操作的數據通常存儲在處理器的寄存器中,而不是內存

    2024年02月02日
    瀏覽(23)
  • [ARM 匯編]高級部分—ARM匯編編程實戰(zhàn)—3.3.2 嵌入式開發(fā)環(huán)境搭建

    [ARM 匯編]高級部分—ARM匯編編程實戰(zhàn)—3.3.2 嵌入式開發(fā)環(huán)境搭建

    搭建一個嵌入式開發(fā)環(huán)境主要包括以下幾個部分: 安裝交叉編譯器 配置集成開發(fā)環(huán)境(IDE) 安裝調試工具 下載和燒錄程序 接下來,我們將詳細介紹每個部分,并提供相應的實例。 安裝交叉編譯器 交叉編譯器是用于將您編寫的ARM匯編代碼編譯成可執(zhí)行文件的工具。在本教程

    2024年02月11日
    瀏覽(21)
  • ARM 體系結構與匯編語言

    Load/Store 架構,CPU 不能直接處理內存中的數據,需要先將內存中的數據加載到寄存器中才能操作,然后將處理結果存儲到內存中。 固定的指令長度、單周期指令。 傾向于使用更多的寄存器來存儲數據,而不是使用內存中的堆棧、效率更高。 ARM 有桶型移位寄存器,單周期內可

    2024年02月16日
    瀏覽(89)
  • 嵌入式:ARM匯編語言程序設計基礎教程

    嵌入式:ARM匯編語言程序設計基礎教程

    ① 合理地分配存儲器資源,將前述的目標系統(tǒng)‘數據結構模型’表示到各存儲器單元。 ② CPU寄存器數量有限,在程序中,大多數操作都要使用寄存器;并且有的操作使用特定的寄存器(如堆棧操作使用SP/R13等),程序中要合理分配各寄存器的用途。 用計算機語言,對數據結

    2023年04月23日
    瀏覽(41)
  • 用ARM進行匯編語言編程(4)帶有分支的循環(huán)和條件指令執(zhí)行

    用ARM進行匯編語言編程(4)帶有分支的循環(huán)和條件指令執(zhí)行

    ARM 編程模擬器網站地址: 在arm里也有和高級語言一樣的for和while循環(huán),可以根據條件來判斷是否執(zhí)行 首先我們創(chuàng)建一個data標簽,然后在里面寫一個分支,存放一些數值,然后使這些存放的數值依次相加 然后我們要將list加載到內存里 然后使用直接尋址,將r0寄存器里的值放

    2024年02月06日
    瀏覽(37)
  • arm點燈

    arm點燈

    2. ?

    2024年02月16日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包