从头开始用 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的主要内容,如果未能解决你的问题,请参考以下文章