对寄存器的操作--本质还是对寄存器进行操作

本文介绍了四种寄存器操作方法:1) 库封装后的直接操作,如CC2530F256;2) 裸机Cortex-A53的直接内存操作;3) 使用库函数,如STM32固件库;4) 内核驱动层的虚拟地址映射操作,通过ioctl调用。并提供了一个LED驱动的内核模块实现示例。
摘要由CSDN通过智能技术生成

1、当自身的库里对变量做了封装,即对地址做了映射,则可以直接操作,如cc2530F256:P1DIR|=0X1<<4,p1_0=1

在这里插入图片描述

2、裸机操作,如cortex-A53,boot启动前的裸机操作:
#define GPIOB27_FUNC (unsigned int *)0xC001B024
#define GPIOB26_OUTENB (unsigned int *)0xC001B004
#define GPIOB26_OUT (unsigned int *)0xC001B000

*GPIOB26_FUNC &= ~(0x3<<20);
*GPIOB26_FUNC |= 0x1<<20;

3、封装了库函数,库函数里实现了对寄存器的操作,此时对寄存器只做了解,直接使用库函数如stm32的固件库
在这里插入图片描述
4、使用内核提供的虚拟地址映射(内核驱动层操作,应用层通过ioctl调用)
在这里插入图片描述
led.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/kernel.h>
#include <asm-generic/ioctl.h>
#include <asm/io.h>
#include “led_drv.h”

#define NAME “led_drv”

#define GPIOB26_FUNC 0xC001B024
#define GPIOB26_OUTENB 0xC001B004
#define GPIOB26_OUT 0xC001B000

unsigned int *gpiob26_func_viraddr;
unsigned int *gpiob26_outenb_viraddr;
unsigned int *gpiob26_out_viraddr;

void led_addr_iomap(void)
{
gpi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值