MSP432P 汇编,C语言点灯

举报
dz小伟 发表于 2022/11/12 18:51:34 2022/11/12
【摘要】 ​ 目录一、查看芯片手册1.1、寄存器DIR1.2、寄存器OUT1.3、寄存器地址二、汇编2.1、用到指令2.2、完整代码三、c语言一、查看芯片手册led接在P0^1口,高电平亮。1.1、寄存器DIR​编辑 共8位,对应P1口的8个IO,设置其工作模式,输入输出。输入0,输出1。使用到0口,写入0x01即可。1.2、寄存器OUT​编辑共8位,对应P1口的8个IO,设置其输出高低电平。低电平0...

 目录

一、查看芯片手册

1.1、寄存器DIR

1.2、寄存器OUT

1.3、寄存器地址

二、汇编

2.1、用到指令

2.2、完整代码

三、c语言

一、查看芯片手册

led接在P0^1口,高电平亮。

1.1、寄存器DIR

编辑

 共8位,对应P1口的8个IO,设置其工作模式,输入输出。

输入0,输出1。

使用到0口,写入0x01即可。

1.2、寄存器OUT

编辑

共8位,对应P1口的8个IO,设置其输出高低电平。

低电平0,高电平1。

使用到0口,写入0x01即可输出高电平。

1.3、寄存器地址。

编辑

 可以看出P1口的寄存器DIR,OUT地址分别是。

P1DIR:0x40004C04。

P1OUT:0x40004C02。

编辑

 可以看出每个寄存器占用2字节空间,也就是16位,我们只使用到了低8位。

二、汇编

2.1、用到指令

EXPORT:表明该符号可以被外部模块使用,类似于C中的extern功能。。

IMPORT:表明要调用的函数为外部文件定义。

STRH:16位数据放入寄存器中。

注:写入只能用STRH指令,不能用STR(因为是16位数据,用STR是32,会超出越界)。

2.2、完整代码。

;主函数入口
main PROC
	EXPORT  main
	;设置P1^0为输出
	LDR     R4, =0x01
	LDR     R5, =0x40004C04
	STRH	R4,[R5]
	ENDP

;led闪烁
led PROC
	;打开LED,输出高电平,并延时
	LDR     R4, =0x01
	LDR     R5, =0x40004C02
	STRH	R4,[R5]
	LDR     R0, =delay
    BLX     R0
	
	;关闭LED,输出低电平,并延时
	LDR     R4, =0x00
	LDR     R5, =0x40004C02
	STRH	R4,[R5]
	LDR     R0, =delay
    BLX     R0
	
	;跳转回LED函数,实现循环
	B led
	ENDP

;延时函数
delay PROC
	LDR R2, =500000
	LDR R3, =0x0
	ENDP
delay_loop PROC
	SUB R2, R2, #1 ;每次R2减一
	CMP R2, R3 ;比较
	BNE delay_loop ;不相等,跳转回delay_loop
	BX LR	;函数调用返回
	ENDP	

三、c语言

地址是32位,存储是16位。

所以指针类型也必须是16位的,32位会越界访问(导致程序不能正常运行)。

一个指针变量占用4字节内存空间(无论是什么类型的指针变量都是4,类型只决定可以访问的内存空间是多少字节,例如:char*只能访问1字节内存,int*访问4个连续的内存空间4字节)。

每一个地址空间是1字节内存单元。

编辑


int main(void)
{
    volatile uint32_t i;
	volatile uint16_t* QWQW = (volatile uint16_t *)0x40004c02;
	volatile uint16_t* QWQW1 = (volatile uint16_t *)0x40004c04;
	*QWQW1=0x01;//设置为输出

    while(1)
    {

		*QWQW = 0x01; //点亮
        for(i=100000; i>0; i--);//延时
		*QWQW = 0x00; //熄灭
	    for(i=100000; i>0; i--);
    }
}

编辑



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。