从头开始用 C 语言编程 ARM

Posted

技术标签:

【中文标题】从头开始用 C 语言编程 ARM【英文标题】:Programming ARM in C from scratch 【发布时间】:2011-09-26 06:26:07 【问题描述】:

我有一个来自 Embeded 艺术家的 LPC3141 开发人员套件,并且我已经成功地创建了基于 Eclipse 的免费 IDE,它可以成功地为 ARM 编译。我使用包含的闪烁器示例测试了我的 IDE。我有一个启动代码和一个可以工作的链接器脚本,我将从现在开始使用它们。

现在我想学习如何从零开始我自己的闪烁程序。我必须先编程什么?是GPIO寄存器,定时器寄存器,uart寄存器,……???第一件事是什么?我需要写的东西实际上是 HAL 吗?我已经订购了这个book,你觉得呢?

谢谢。

问候 Ziga

【问题讨论】:

如果你有代码,你不能检查一下看看你需要写什么吗? 【参考方案1】:

这些页面可能很有用,相同的家族,不同的芯片。

http://lpcstuff.blogspot.com/2008/09/lpc-2148-blinker-1.html

http://lpcstuff.blogspot.com/2010/08/nxp-mbed-aint-so-bad-after-all.html

您不需要计时器或中断或类似的东西来开始。有一个(长)的C循环计数,然后改变gpio的状态。您需要将 gpio 配置为输出。小心不要让 C 编译器优化你的延迟循环。稍后您可以轮询计时器,然后在您觉得确实需要时中断。

【讨论】:

我猜这些只是 asm 的例子,这是一个不同的 arm,但显示了 asm 到 C 的连接,sam7stuff.blogspot.com 点击我的名字/个人资料并查看许多类似的站点,主要是关于闪烁各种 arm micros、asm 和 C 上的 LED。【参考方案2】:

非常容易开始使用 arm 微控制器。您只需阅读微控制器的数据表和用户手册。您可以在用户手册中找到有关外围设备和寄存器的所有文档

https://www.nxp.com/docs/en/user-guide/UM10362.pdf

比如这个代码是针对lpc2148()的:

#include <lpc214x.h> // this header file is provided by nxp and contains all register addresses

/* delay function is using only for loop to generate delay. 
For accurate timing, use a hardware timer/counter (systick timer is recommended (because it is so easy and configurable via cmsis functions that are provided by ARM)) */
void delay_ms(unsigned int count)

  unsigned int j=0,i=0;
  for(j=0;j<count;j++)
  
    for(i=0;i<3000;i++)
        asm("nop");
  


/* main function */
int main() 

    PINSEL2 = 0x000000;  //Configure the P1 Pins for GPIO;
    IODIR1 = 0xffffffff; //Configure the P1 pins as OUTPUT;

    while(1)
    
       iosET1 = 0xffffffff;     // Make all the Port pins as high  
       delay_ms(1000);

       IOCLR1 = 0xffffffff;     // Make all the Port pins as low  
       delay_ms(1000);
    
    return 0;

【讨论】:

以上是关于从头开始用 C 语言编程 ARM的主要内容,如果未能解决你的问题,请参考以下文章

c语言,输入一个整数 k 和一个字符串 s(k < 字符串s的长度),输出从头开始的s的前k个字符?

ARM裸机开发:C语言点亮LED

用 C 语言理解 Linux 软件库

嵌入式ARM 混合编程,汇编调用C语言,在线等

ARM 开发板 问题

求用ARM汇编语言编写从1加到100的程序