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;
}