TCFG_NOR_FAT
时间: 2024-03-31 14:31:01 浏览: 23
TCFG_NOR_FAT是一个在嵌入式系统中常见的配置选项,它用于指定使用NOR Flash存储设备来实现文件系统的功能。NOR Flash是一种非易失性存储器,常用于嵌入式系统中的代码存储和数据存储。
TCFG_NOR_FAT配置选项通常包括以下几个方面的功能:
1. 文件系统支持:TCFG_NOR_FAT用于启用或禁用使用NOR Flash作为文件系统的支持。当启用时,系统可以在NOR Flash上创建、读取和写入文件。
2. 文件系统格式:TCFG_NOR_FAT还可以指定文件系统的格式,例如FAT12、FAT16或FAT32等。这决定了文件系统的最大容量和文件名长度等限制。
3. 存储空间分配:TCFG_NOR_FAT还可以配置文件系统在NOR Flash上的存储空间分配方式,例如指定文件系统的起始地址和大小等。
总之,TCFG_NOR_FAT是一个用于配置使用NOR Flash作为文件系统的选项,它可以控制文件系统的支持、格式和存储空间分配等方面的功能。
相关问题
static long fs4412_sa_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int nr; int data; if(cmd == LED_ON || cmd == LED_OFF || cmd == SET_CNT){ data=copy_from_user(&nr, (void *)arg, sizeof(nr)); } switch (cmd) { case LED_ON: fs4412_led_on(nr); break; case LED_OFF: fs4412_led_off(nr); break; case PWM_ON: writel((readl(pwm->gpdcon) & ~0xf) | 0x2,pwm->gpdcon); writel((readl(pwm->timer_base + TCFG0)) | 0xff,pwm->timer_base + TCFG0); writel((readl(pwm->timer_base + TCFG1) & ~0xf) | 0x2,pwm->timer_base + TCFG1); writel((readl(pwm->timer_base + TCON) & ~0xf) | 0x9, pwm->timer_base + TCON); break; case PWM_OFF: writel((readl(pwm->timer_base + TCON) & ~0xf), pwm->timer_base + TCON); break; case SET_PRE: writel((readl(pwm->timer_base + TCFG0) & ~0xff) | (nr & 0xff), pwm->timer_base + TCFG0); writel((readl(pwm->timer_base + TCON) & ~0xf) | 0x9, pwm->timer_base + TCON); break; case SET_CNT: writel(nr, pwm->timer_base + TCNTB0); writel(nr >> 1, pwm->timer_base + TCMPB0); writel(readl(pwm->timer_base + TCON) | (0x1 << 1), pwm->timer_base + TCON); writel(readl(pwm->timer_base + TCON) & ~(0x1 << 1), pwm->timer_base + TCON); break; default: return -ENOTTY; } return 0; }
这段代码是 FS4412 开发板的设备驱动程序中的 unlocked_ioctl 函数,用于处理用户空间发来的 ioctl 命令。函数会根据传入的 cmd 参数来执行相应的操作。其中 LED_ON、LED_OFF 和 SET_CNT 命令需要传入一个整型参数,函数通过 copy_from_user 函数将参数从用户空间拷贝到内核空间。LED_ON 和 LED_OFF 命令用于控制 LED 灯的开关,PWM_ON 和 PWM_OFF 命令用于开启和关闭 PWM 波形输出,SET_PRE 和 SET_CNT 命令用于设置 PWM 的预分频和计数器值。函数执行成功后返回 0。若 cmd 参数不被识别,则返回 -ENOTTY。
Exynos_4412编程实现输出占空比为2:1,波形周期为9ms的PWM波形
Exynos_4412是一款基于Cortex-A9架构的处理器,具有多个定时器/计数器模块,可以用来产生PWM波形。
以下是使用定时器模块产生占空比为2:1,周期为9ms的PWM波形的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <linux/i2c-dev.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <sys/mman.h>
// Exynos 4412寄存器地址定义
#define GPD0CON 0x114000A0
#define TCFG0 0x139D0000
#define TCFG1 0x139D0004
#define TCON 0x139D0008
#define TCNTB0 0x139D000C
#define TCMPB0 0x139D0010
#define TCNTO0 0x139D0014
// 映射寄存器地址到用户空间
void* mmap_register(uint32_t addr, size_t size) {
int fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0) {
perror("failed to open /dev/mem");
exit(EXIT_FAILURE);
}
void* map = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~0xFFF);
if (map == MAP_FAILED) {
perror("failed to mmap register");
exit(EXIT_FAILURE);
}
close(fd);
return map + (addr & 0xFFF);
}
int main() {
// 映射寄存器
volatile uint32_t* gpd0con = mmap_register(GPD0CON, 0x1000);
volatile uint32_t* tcfg0 = mmap_register(TCFG0, 0x1000);
volatile uint32_t* tcfg1 = mmap_register(TCFG1, 0x1000);
volatile uint32_t* tcon = mmap_register(TCON, 0x1000);
volatile uint32_t* tcntb0 = mmap_register(TCNTB0, 0x1000);
volatile uint32_t* tcmpb0 = mmap_register(TCMPB0, 0x1000);
volatile uint32_t* tcnto0 = mmap_register(TCNTO0, 0x1000);
// 配置GPD0_0引脚为定时器PWM输出
*gpd0con = (*gpd0con & ~0xF) | 0x2;
// 配置定时器0
*tcfg0 = (*tcfg0 & ~0xFFFF) | 0xFF; // 预分频器0xFF
*tcfg1 = (*tcfg1 & ~0x7F) | 0x0; // 分频器1
*tcon = (*tcon & ~0xF) | 0x9; // 自动重载模式,定时器0启动
*tcon = (*tcon & ~0xF) | 0x1; // 定时器0停止
// 设置PWM波形周期和占空比
uint32_t period_us = 9000; // 单位:微秒
uint32_t duty_us = 4500; // 单位:微秒
uint32_t cnt = period_us * 1000 / 66; // 66ns为定时器时钟周期
*tcntb0 = cnt; // 定时器0计数器周期
*tcmpb0 = cnt * duty_us / period_us; // 定时器0比较器值
// 启动定时器0
*tcon = (*tcon & ~0xF) | 0x9; // 自动重载模式,定时器0启动
// 持续输出PWM波形
while (true) {
printf("PWM output\n");
usleep(period_us);
}
// 解除映射
munmap((void*)tcon, 0x1000);
munmap((void*)tcfg1, 0x1000);
munmap((void*)tcfg0, 0x1000);
munmap((void*)gpd0con, 0x1000);
return 0;
}
```
这段代码使用定时器模块产生PWM波形,通过映射寄存器的方式访问Exynos 4412的寄存器。其中,GPD0_0引脚被配置为PWM输出,定时器0被用来产生PWM波形。在循环中不断输出PWM波形,周期为9ms,占空比为2:1。你可以根据需要修改period_us和duty_us的值来改变PWM波形的周期和占空比。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)