optee的异常向量表-(irq,fiq,svc...)

378 篇文章 242 订阅 ¥199.90 ¥299.90
142 篇文章 131 订阅 ¥99.90 ¥299.90

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

以thread_a64.S为例,thread_a32.S暂不分析

1、 optee中的异常向量表thread_excp_vect

其中el0_sync_a64和el0_sync_a32是同步异常处理函数,当执行svc指令是会调用该函数;

#define INV_INSN	0
	.section 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
gpio-pca953x.c是一个GPIO驱动,用于控制PCA953x系列的GPIO扩展器。在Linux内核中,GPIO驱动的实现通常是通过向内核注册一个gpio_chip结构体,并实现一些gpio_chip操作函数来实现。而gpio-pca953x.c就是通过实现gpio_chip操作函数来控制PCA953x系列的GPIO扩展器。 下面分析gpio-pca953x.c中的一些重要函数: 1. pca953x_gpio_direction_input() 该函数用于设置GPIO方向为输入。 ```c static int pca953x_gpio_direction_input(struct gpio_chip *chip, unsigned offset) { struct pca953x_chip *pc = gpiochip_get_data(chip); int ret; mutex_lock(&pc->lock); pca953x_gpio_config(pc, offset, PCA953X_DIR_INPUT); ret = pca953x_gpio_to_irq(chip, offset); mutex_unlock(&pc->lock); return ret; } ``` 该函数首先通过gpiochip_get_data()获取pca953x_chip结构体,然后调用pca953x_gpio_config()函数设置GPIO的方向为输入。最后调用pca953x_gpio_to_irq()函数获取GPIO的中断号。 2. pca953x_gpio_direction_output() 该函数用于设置GPIO方向为输出。 ```c static int pca953x_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value) { struct pca953x_chip *pc = gpiochip_get_data(chip); int ret; mutex_lock(&pc->lock); pca953x_gpio_config(pc, offset, PCA953X_DIR_OUTPUT); pca953x_gpio_set_value(chip, offset, value); ret = pca953x_gpio_to_irq(chip, offset); mutex_unlock(&pc->lock); return ret; } ``` 该函数首先通过gpiochip_get_data()获取pca953x_chip结构体,然后调用pca953x_gpio_config()函数设置GPIO的方向为输出,并调用pca953x_gpio_set_value()函数设置GPIO的值。最后调用pca953x_gpio_to_irq()函数获取GPIO的中断号。 3. pca953x_gpio_get() 该函数用于获取GPIO的值。 ```c static int pca953x_gpio_get(struct gpio_chip *chip, unsigned offset) { struct pca953x_chip *pc = gpiochip_get_data(chip); int ret; mutex_lock(&pc->lock); ret = (pca953x_gpio_read(pc) & (1 << offset)) ? 1 : 0; mutex_unlock(&pc->lock); return ret; } ``` 该函数首先通过gpiochip_get_data()获取pca953x_chip结构体,然后调用pca953x_gpio_read()函数读取PCA953x寄存器的值,并根据GPIO的偏移量计算出GPIO的值。 4. pca953x_gpio_set() 该函数用于设置GPIO的值。 ```c static void pca953x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) { struct pca953x_chip *pc = gpiochip_get_data(chip); mutex_lock(&pc->lock); pca953x_gpio_set_value(chip, offset, value); mutex_unlock(&pc->lock); } ``` 该函数首先通过gpiochip_get_data()获取pca953x_chip结构体,然后调用pca953x_gpio_set_value()函数设置PCA953x寄存器的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值