• MSP432P 汇编,C语言点灯


    目录

    一、查看芯片手册

    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、完整代码

    1. ;主函数入口
    2. main PROC
    3. EXPORT main
    4. ;设置P1^0为输出
    5. LDR R4, =0x01
    6. LDR R5, =0x40004C04
    7. STRH R4,[R5]
    8. ENDP
    9. ;led闪烁
    10. led PROC
    11. ;打开LED,输出高电平,并延时
    12. LDR R4, =0x01
    13. LDR R5, =0x40004C02
    14. STRH R4,[R5]
    15. LDR R0, =delay
    16. BLX R0
    17. ;关闭LED,输出低电平,并延时
    18. LDR R4, =0x00
    19. LDR R5, =0x40004C02
    20. STRH R4,[R5]
    21. LDR R0, =delay
    22. BLX R0
    23. ;跳转回LED函数,实现循环
    24. B led
    25. ENDP
    26. ;延时函数
    27. delay PROC
    28. LDR R2, =500000
    29. LDR R3, =0x0
    30. ENDP
    31. delay_loop PROC
    32. SUB R2, R2, #1 ;每次R2减一
    33. CMP R2, R3 ;比较
    34. BNE delay_loop ;不相等,跳转回delay_loop
    35. BX LR ;函数调用返回
    36. ENDP

    三、c语言

    地址是32位,存储是16位

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

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

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

    1. int main(void)
    2. {
    3. volatile uint32_t i;
    4. volatile uint16_t* QWQW = (volatile uint16_t *)0x40004c02;
    5. volatile uint16_t* QWQW1 = (volatile uint16_t *)0x40004c04;
    6. *QWQW1=0x01;//设置为输出
    7. while(1)
    8. {
    9. *QWQW = 0x01; //点亮
    10. for(i=100000; i>0; i--);//延时
    11. *QWQW = 0x00; //熄灭
    12. for(i=100000; i>0; i--);
    13. }
    14. }

     

  • 相关阅读:
    GLM4 开源了!!!
    Latex 报错:The font cannot be found.
    通过函数来提交表单数据,并且携带参数
    vue若依前端项目搭建
    Git的cherry-pick等一些小知识
    【数据结构】二叉树
    C内存管理
    STL(标准模板库)入门
    在Qt的点云显示窗口中添加坐标轴C++
    30行Python极简代码,10分钟get常用技巧
  • 原文地址:https://blog.csdn.net/m0_51247005/article/details/126644073