fs4412开发板点灯程序
时间: 2023-05-13 19:05:07 浏览: 95
以下是一个简单的 fs4412 开发板点灯程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#define GPIO_BASE_ADDR 0x11000000
#define GPIO_SIZE 0x1000
#define LED1_OFFSET 0x880
#define LED2_OFFSET 0x890
#define LED3_OFFSET 0x8A0
#define LED4_OFFSET 0x8B0
#define LED_ON 1
#define LED_OFF 0
int main(int argc, char **argv) {
int fd;
void *gpio_base;
volatile unsigned int *gpio_led1;
volatile unsigned int *gpio_led2;
volatile unsigned int *gpio_led3;
volatile unsigned int *gpio_led4;
// 打开 /dev/mem 设备
if ((fd = open("/dev/mem", O_RDWR | O_SYNC)) < 0) {
perror("open");
exit(1);
}
// 映射 GPIO 地址
gpio_base = mmap(NULL, GPIO_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO_BASE_ADDR);
if (gpio_base == MAP_FAILED) {
perror("mmap");
exit(1);
}
// 获取 LED 的地址
gpio_led1 = (volatile unsigned int *)(gpio_base + LED1_OFFSET);
gpio_led2 = (volatile unsigned int *)(gpio_base + LED2_OFFSET);
gpio_led3 = (volatile unsigned int *)(gpio_base + LED3_OFFSET);
gpio_led4 = (volatile unsigned int *)(gpio_base + LED4_OFFSET);
// 设置 LED 为输出模式
*gpio_led1 &= ~(0x7 << 4);
*gpio_led2 &= ~(0x7 << 4);
*gpio_led3 &= ~(0x7 << 4);
*gpio_led4 &= ~(0x7 << 4);
*gpio_led1 |= (0x1 << 4);
*gpio_led2 |= (0x1 << 4);
*gpio_led3 |= (0x1 << 4);
*gpio_led4 |= (0x1 << 4);
// 循环点亮 LED
while (1) {
*gpio_led1 = LED_ON;
*gpio_led2 = LED_OFF;
*gpio_led3 = LED_OFF;
*gpio_led4 = LED_OFF;
usleep(500000);
*gpio_led1 = LED_OFF;
*gpio_led2 = LED_ON;
*gpio_led3 = LED_OFF;
*gpio_led4 = LED_OFF;
usleep(500000);
*gpio_led1 = LED_OFF;
*gpio_led2 = LED_OFF;
*gpio_led3 = LED_ON;
*gpio_led4 = LED_OFF;
usleep(500000);
*gpio_led1 = LED_OFF;
*gpio_led2 = LED_OFF;
*gpio_led3 = LED_OFF;
*gpio_led4 = LED_ON;
usleep(500000);
}
// 解除映射
munmap(gpio_base, GPIO_SIZE);
// 关闭 /dev/mem 设备
close(fd);
return 0;
}
```
这个程序可以让 fs4412 开发板上的四个 LED 灯交替闪烁。