暫存器直接操作

2021-10-14 17:52:14 字數 2486 閱讀 1665

#include

#include

#include

#include

#include

#include

static

unsigned

int major;

static

struct device * led_dev;

static

struct class * led_class;

static

volatile

unsigned

long

* gpc0_con;

static

volatile

unsigned

long

* gpc0_dat;

int led_open (

struct inode * node,

struct file * filp)

int led_release (

struct inode *node,

struct file * filp)

ssize_t led_write

(struct file * filp,

const

char __user * buff, size_t count, loff_t * offset)

if(led_cmd ==0)

//關燈

else

//開燈

return0;

}const

struct file_operations fops =

;static

int __init drv_led_init

(void

)// 2. 建立類

//引數1: this_module,表示當前模組

//引數2: /sys/class/下建立的目錄名稱,自定義

led_class =

class_create

(this_module,

"led_class");

if(is_err

(led_class)

)//3. 建立裝置結點

// 手動建立裝置節點的方法: mknod /dev/drv_led c 250 0

// 引數1: 建立的類

// 引數2: 裝置的父類

// 引數3: 裝置號,包括了主裝置號和次裝置號,用mkdev來合成

// 引數4: 裝置檔案的私有資料

// 引數5: 裝置節點名稱

led_dev =

device_create

(led_class,

null

,mkdev

(major,0)

,null

,"drv_led");

if(is_err

(led_dev)

)//4. 硬體初始化

//引數1:要對映的實體地址的起始

//引數2:要對映的大小

gpc0_con =

ioremap

(0xe0200060,8

);gpc0_dat = gpc0_con +1;

//控制暫存器的[19:12]清零

*gpc0_con &=~

(0xff

<<12)

;//控制暫存器的[19:12]賦值為0001 0001

*gpc0_con |=(

0x11

<<12)

;//資料暫存器清零,關閉當前所有的led

*gpc0_dat &=~

(0x03

<<3)

;return0;

err_device_create:

class_destroy

(led_class)

; err_class_create:

unregister_chrdev

(major,

"drv_led");

return ret;

}static

void __exit drv_led_exit

(void

)//模組的入口函式

module_init

(drv_led_init)

;//模組的出口函式

module_exit

(drv_led_exit)

;//要遵循gpl協議

module_license

("gpl"

);

#include

#include

#include

#include

#include

#include

intmain

(void

)while

(count--

)close

(fd)

;return0;

}

暫存器對映與直接操作暫存器

一 儲存器對映 與重對映 儲存器本身不具有位址資訊,它的位址是由晶元廠商或使用者分配,給 物理儲存器分配 邏輯位址的過程就稱為儲存器對映 通過這些邏輯位址就可以訪問到相應的儲存器的物理儲存單元。如果給儲存器再分配乙個位址就叫儲存器重對映。如stm32,對於 片上外設,它們以四個位元組為乙個單元,共3...

CC1310直接操作暫存器程式設計

官方 cc13x0 提供的驅動為了相容多種器件和作業系統比較抽象,例如串列埠傳送函式是這樣的 int fast32 t uart write uart handle handle,const void buffer,size t size 輕易看不出來是如何操作暫存器的,這種方式的驅動檔案放在.so...

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...