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.2k
isme
isme 認證專家 2022-09-05
冰鎮大西瓜

tls_gpio_write比tls_bitband_write考慮的東西相對多一些,所以判斷語句也會多一些,參數也更少更加方便用戶調用,相對效率比後者低一些,如果不考慮效率用tls_gpio_write即可。

1 個回答

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽