tls_gpio_write和tls_bitband_write分别适用于那种场合

发布于 2022-09-05 00:54:39

tls_gpio_write操作了写使能寄存器,但tls_bitband_write直接操作写数据寄存器。
很明显tls_bitband_write效率更高,但为什么tls_gpio_write要这么实现呢?

void tls_gpio_write(enum tls_io_name gpio_pin, u8 value)
{

u32 cpu_sr = 0;
u32 reg;
u32    reg_en;
u8  pin;
u16 offset;

if (gpio_pin >= WM_IO_PB_00)
{
    pin    = gpio_pin - WM_IO_PB_00;
    offset = TLS_IO_AB_OFFSET;
}
else
{
    pin    = gpio_pin;
    offset = 0;
}


cpu_sr = tls_os_set_critical();

reg_en = tls_reg_read32(HR_GPIO_DATA_EN + offset);
tls_reg_write32(HR_GPIO_DATA_EN + offset, reg_en | (1 << pin));

reg = tls_reg_read32(HR_GPIO_DATA + offset);
if(value)
    tls_reg_write32(HR_GPIO_DATA + offset, reg |  (1 << pin));    /* write high */
else
    tls_reg_write32(HR_GPIO_DATA + offset, reg & (~(1 << pin)));/* write low */

tls_reg_write32(HR_GPIO_DATA_EN + offset, reg_en);

tls_os_release_critical(cpu_sr);

}

static __inline void tls_bitband_write(volatile unsigned int addr, unsigned int bit, unsigned int val)
{

unsigned int temp;

temp = (M32(addr) & ~(1 << bit)) | (val << bit);

*((volatile unsigned int * )addr) = temp;

}

查看更多

关注者
0
被浏览
2.3k
isme
isme 认证专家 2022-09-05
冰镇大西瓜

tls_gpio_write比tls_bitband_write考虑的东西相对多一些,所以判断语句也会多一些,参数也更少更加方便用户调用,相对效率比后者低一些,如果不考虑效率用tls_gpio_write即可。

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览