实验2C和汇编语言的混合编程实验.doc
文本预览下载声明
PAGE
PAGE 4
实验2 C和汇编语言的混合编程实验
1、实验目的
学习在C程序中使用嵌入式汇编编写程序
了解嵌入式汇编的格式、语言特点
2、实验设备
S3C2410开发板
ADS1.2集成开发环境,JTAG调试器
串口连接线
3、实验原理
在ARM的应用开发中,C语言功能强大且容易编写程序,但是汇编程序在底层的操作仍然具有C程序无法替代的功能,有时候我们需要在C程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作。
在ARM C语言中,使用关键词__asm来标志一段汇编指令程序:其格式如下,
__asm
{
汇编程序
}
嵌入式汇编语言不同的地方有:
如果一行中有多个汇编指令,指令之间用分号(;)隔离
如果一天指令占多行,要使用续行符号(\)
在汇编指令段中可以使用C语言的注释语句
4、实验电路图
5、程序实现
5.1创建GPFC.c源文件,应用C语言实现嵌入式编程
/* 这是一个利用GPIO做跑马灯的程序 */
/* GPIO1到GPIO4分别对应2410的GPF4到GPF7 */
#include 2410lib.h
#define GPFCON (*(volatile unsigned *)0 //Port F control
#define GPFDAT (*(volatile unsigned *)0 //Port F data
#define GPFUP (*(volatile unsigned *)0 //Pull-up control F
int Main()
{
GPFCON=(GPFCON|0xFF00)0xFFFF55FF;//GPF4--GPF7设置为output
GPFUP|=0xFF00; //disable GPF pull up
while(1)
{
int i=0;
GPFDAT=(GPFDAT0xFFFFFF0F)|0xE0;
Delay(100);
GPFDAT=(GPFDAT0xFFFFFF0F)|0xD0;
Delay(100);
GPFDAT=(GPFDAT0xFFFFFF0F)|0xB0;
Delay(100);
GPFDAT=(GPFDAT0xFFFFFF0F)|0x70;
Delay(100);
}
}
2创建GPFA.c源程序,实现在C程序中嵌入ARM汇编指令
//定义寄存器地址
#define GPFCON (*(volatile unsigned *)0 //Port F control
#define GPFDAT (*(volatile unsigned *)0 //Port F data
#define GPFUP (*(volatile unsigned *)0 //Pull-up control F
int Main()
{
int x=0;
//时钟、端口、串口初始化
SetClockDivider(1, 1);
SetSysFclk(DFT_FCLK_VAL);
Port_Init();
Uart_Select(0);
Uart_Init(0, UART_BAUD);
GPFCON=(GPFCON|0xFF00)0xFFFF55FF;//GPF4--GPF7设置为output
GPFUP|=0xFF00; //disable GPF pull up
while(1)
{
GPFDAT=(GPFDAT0xFFFFFF0F)|0xE0;
Delay(200);
__asm //嵌入汇编指令
{
add x,x,#1
nop
nop
}
GPFDAT=(GPFDAT0xFFFFFF0F)|0xD0;
Delay(200);
GPFDAT=(GPFDAT0xFFFFFF0F)|0xB0;
Delay(200);
GPFDAT=(GPFDAT0xFFFFFF0F)|0x70;
Del
显示全部