- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式C语言编程要点教程
嵌入式C语言编程要点;说明:
(1)无论8位还是32位系统中,99%以上的代码是用C语言完成的。只有不到1%的代码是必须用汇编完成的。
(2)在ARM系统中启动引导程序bootloader可分为两大段,第一段用汇编完成,主要是初始化必要的硬件(关看门狗、关中断、设置系统时钟、初始化内存控制器、初始化各模式堆栈指针、设置缺省中断处理函数、为C语言准备环境)第二段用C语言完成(主要包括进一步的初始化硬件外设、代码复制(解压)、准备参数、引导系统启动、甚至网络下载代码、shell等功能);(1)嵌入式C语言指针对绝对地址的访问方法
#define rBWSCON (*(volatile unsigned *)0x1C80000)
#define rUTXH0 (*(volatile unsigned char *)0x1D00023)
unsigned int tmp;
tmp=rBWSCON;
rBWSCON = 0x3f478;
(2)嵌入式C语言函数指针的使用
#define DOWNLOAD_ADDR 0x04c00000
void (* restart)(void)=(void(*)(void)0x0);
void (* run)(void)=(void (*)(void)DOWNLOAD_ADDR);
(3)嵌入式中断函数的声明
void __irq IRQ_Eint1(void)
{ //C语言代码
};#define BEEPCON 0 /* P0.7引脚控制B1,低电平蜂鸣 */
/****************************************************************************
* 名称:IRQ_Eint1()
* 功能:外部中断EINT1服务函数,取反B1控制口。
****************************************************************************/
void __irq IRQ_Eint1(void)
{ uint32 i;
i = IO0SET; // 读取当前B1控制值
if( (iBEEPCON)==0 ) // 控制B1输出取反
{ IO0SET = BEEPCON;
}
else
{ IO0CLR = BEEPCON;
}
EXTINT = 0x02; // 清除EINT1中断标志
VICVectAddr = 0; // 向量中断结束
}
;/****************************************************************************
* 名称:main()
* 功能:初始化外部中断1(EINT1)为向量中断,并设置为下降沿触发模式,然后等待外部中断。
* 说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
****************************************************************************/
int main(void)
{ PINSEL0 = 0 // 设置管脚连接,P0.14设置为EINT1
IO0DIR = BEEPCON; // 设置B1控制口为输出,其它I/O为输入
EXTMODE = 0x02; // 设置EINT1中断为边沿触发模式
EXTPOLAR = 0x00; // 设置EINT1中断为下降沿触发
/* 打开EINT1中断(设置向量控制器,即使用向量IRQ) */
VICIntSelect = 0 // 设置所有中断分配为IRQ中断
VICVectCntl0 = 0x2F; // 分配EINT1中断到向量中断0
VICVectAddr0 = (int)IRQ_Eint1; // 设置中断服务程序地址
EXTINT = 0x02; // 清除EINT1中断标志
VICIntEnable = 0 // 使能EINT1中断
while(1); // 等待中断
return(0);
}
;(4)嵌入式C和C++兼容
您可能关注的文档
- 复旦 周小林 信息论 4.信息率失真函数.ppt
- 复旦大学附属儿科.pptx
- 基本笔画的写法.ppt
- 复旦 周小林 信息论 2.信源与信息熵.ppt
- 复古欧式演示模板.pptx
- 岩石的本构关系和强度(公式)教程.ppt
- 复礼(上课).ppt
- 复旦 周小林 信息论 6.信道编码.ppt
- 基础心理学3.2.ppt
- 岭南版美术四年级神秘的图腾柱教程.ppt
- 江苏省灌云高级中学2023-2024学年高三上学期第一次月考地理试题含答案.docx
- 备战2024年高考物理一轮重难点复习 第十三章 近代物理.docx
- 江苏省高邮市一中2021-2022学年高三上学期第一次月考语文试题(原卷版).docx
- 江苏省华罗庚中学2023-2024学年高三上学期12月阶段检测数学试卷含答案.docx
- 江苏省海门中学2023-2024学年高三上学期第一次调研考试地理试题及答案.docx
- 备战2024年高考物理一轮重难点复习 第九章 恒定电流.docx
- 江苏省高邮市2023-2024学年高三下学期3月学情调研数学试题含答案.docx
- 备战2024年高考物理一轮重难点复习 实验十一:探究影响感应电流方向的因素.docx
- 备战2024年高考物理一轮重难点复习 实验三:验证平行四边形定则.docx
- 备战2024年高考物理一轮重难点复习 第十四章 光.docx
文档评论(0)