单片机:HC32L176JATA
内核:Cotex M0
本单片机在Keil5中内嵌汇编时只支持M0指令集。
下面是将12864液晶屏的驱动改为汇编以提高运行效率。
//原来C代码
void LCD_SdCmd(uint8_t Command)
{
uint8_t i;
LCD_A0_RESET();
LCD_CS_RESET();
for(i=0;i<8;i++)
{
LCD_SCLK_RESET();
if(Command & 0x80)
LCD_DATA_SET();
else
LCD_DATA_RESET();
LCD_SCLK_SET();
Command <<= 1;
}
LCD_CS_SET();
}
//内嵌汇编后的代码
void LCD_SdCmd(uint8_t Command)
{
#define PAOUT_ADDR 0x40020D48
//下面定义的变量,汇编代码可以直接用,如果用R0这类寄存器则会有警告
uint32_t port_out=PAOUT_ADDR;
uint32_t value;
uint8_t i=8;
uint8_t temp;
__ASM
{
LDR value, [port_out]
BICS value,value, #0X80 //LCD_A0_SET();
BICS value, value, #0x1000; //LCD_CS_RESET();
STR value, [port_out]
loop:
BICS value, value, #0x2000; //LCD_SCLK_RESET();
STR value, [port_out]
BICS value, value, #0x4000; //LCD_DATA_RESET();
ANDS temp, Command, #0X80 //1
BEQ loop2 //3
ORRS value, value, #0x4000; //LCD_DATA_SET(); //1
loop2:
STR value, [port_out] //2
ORRS value, value, #0x2000; //LCD_SCLK_SET();
STR value, [port_out]
LSLS Command, Command, #1 //DData <<= 1;
SUBS i, #1
BNE loop
ORRS value, value, #0x1000; //LCD_CS_SET();
STR value, [port_out]
}
}
经过实测可以使用。