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 个回答

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览