当前位置:文档之家› 嵌入式系统设计实验四

嵌入式系统设计实验四

while(1) {
printf("Serial Loop Output \r\n"); RPI_WaitMicroSeconds(50000); //延时等中断 } }
2.流水灯代码 void __attribute__((interrupt("IRQ"))) interrupt_vector(void) //定时器中断处理函数中实现流水灯
3.编译烧录
将 kernel7.img 拷贝至 sd 卡,然后上电树莓派运行观察结果 4.硬件接线
六、实验结果与分析
实验完成
七、讨论、心得 本次实验重点在于对代码的理解和融会贯通,实验中遇到一个问题,我们组的下载线按照 TXD 对应 RXD 接时串口无反应,后改成下载线 TXD 接 TXD,RXD 接 RXD 打印输出了结果,但其他组却是 TXD 对应 RXD,怀疑可能下载线错误。
RPI_GetArmTimer()->IRQClear = 1;
ticks++; if( ticks > 1 ) {
ticks = 0;
seconds++; if( seconds > 59 ) {
seconds = 0; calculate_frame_count = 1; } }
/* Flip the LED */ if( lit 睿 学号:3130103850 日期:2018.3.28 地点:创客空间
课程名称: 嵌入式系统设计 实验名称:实验四 C 语言裸机编程 一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理 七、讨论、心得
指导老师:马永昌
成绩:________________
/* Enable interrupts! */ _enable_interrupts(); // 使能中断
/* Initialise the UART */ RPI_AuxMiniUartInit( 115200, 8 ); // 初始化串口,波特率 115200,数据以 8 位传送
/* Print to the UART using the standard libc functions */ // 打印串口 printf( "Embeded system experiment\r\n" ); printf( "Initialise UART console with standard libc\r\n\n" );
{ static int lit = 0; static int ticks = 0; static int seconds = 0; static int flag = 0; // 用作流水灯标志位,每进入一次中断改变一次值
static int light_0; //定义三个灯 static int light_1; static int light_2;
{ /* Init Led */ LED_INIT(); //初始化 LED,将 LED 的 GPIO 设置为输出
//设置流水灯 GPIO5,6,13 为输出 RPI_SetGpioOutput(RPI_GPIO5); RPI_SetGpioOutput(RPI_GPIO6); RPI_SetGpioOutput(RPI_GPIO13);
LED_OFF(); lit = 0; } else { LED_ON(); lit = 1; }
if(flag == 0) //flag 为 0,亮灯 5,灭 6,13 {
light_0 = RPI_GPIO5; light_1 = RPI_GPIO6; light_2 = RPI_GPIO13; flag++; } else if(flag == 1) //flag 为 1,亮灯 6,灭 5,13
三、主要仪器设备 树莓派、PC 机
四、操作方法和实验步骤 1 通过定时器产生中断,控制 gpio,实现跑马灯 2 控制 uart 控制器,产生调试打印。
五、实验数据记录和处理
1.主程序 arm.c 注释 //包含头文件 #include <string.h> #include <stdio.h> #include <stdlib.h>
RPI_SetGpioValue(light_0,RPI_IO_HI); //light_0 设置高电平,点亮灯 RPI_SetGpioValue(light_1,RPI_IO_LO); //light_1 设置低电平,熄灭灯 RPI_SetGpioValue(light_2,RPI_IO_LO); //light_2 设置低电平,熄灭灯 }
{ light_0 = RPI_GPIO6; light_1 = RPI_GPIO5; light_2 = RPI_GPIO13; flag++;
} else //flag 为 2,亮灯 13,灭 5,6 {
light_0 = RPI_GPIO13; light_1 = RPI_GPIO5; light_2 = RPI_GPIO6; flag = 0; }
/* Setup the ARM Timer */ //配置计时器的控制寄存器 RPI_GetArmTimer()->Control =
RPI_ARMTIMER_CTRL_23BIT | //设置计时器为 1:23-bit counter RPI_ARMTIMER_CTRL_ENABLE | // 使能定时器 RPI_ARMTIMER_CTRL_INT_ENABLE | // 使能定时器中断 RPI_ARMTIMER_CTRL_PRESCALE_256; // 定时器分频
#include "rpi-aux.h" #include "rpi-armtimer.h" #include "rpi-gpio.h" #include "rpi-interrupts.h" #include "rpi-systimer.h" #include "rpi-led.h"
/** Main function - we'll never return from here */ void kernel_main( unsigned int r0, unsigned int r1, unsigned int atags )
实验类型:验证型
同组学生姓名:__孙凡原_______
二、实验内容和原理(必填)
四、操作方法和实验步骤
六、实验结果与分析(必填)
一、实验目的和要求 初步了解 C 运行库 初步了解 gcc arm 常用编译选项 了解 ARM 中断处理过程
二、实验内容和原理 编写 C 裸机代码实现跑马灯,通过控制 Timer 中断实现 通过控制 uart 串口进行调试打印
/* Enable the timer interrupt IRQ */ //使能定时器中断 RPI_GetIrqController()->Enable_Basic_IRQs = RPI_BASIC_ARM_TIMER_IRQ;
/* Setup the system timer interrupt */ /* Timer frequency = Clk/256 * 0x400 */ RPI_GetArmTimer()->Load = 0x400; //设置计时器的装载值
相关主题