Cortex‐M0的位帶操作代碼
//IO輸出方向設(shè)置
#define SDA_IN() {GPIOA->MODER&=0XFFF1FFFF;} //PA_10設(shè)置成輸入
#define SDA_OUT() {GPIOA->MODER&=0XFFF5FFFF;} //PA_10設(shè)置成輸出
// SDA = PA_10;SCL = PA_9
#define IIC_SCL PAout(9)
#define IIC_SDA PAout(10)
#define READ_SDA PAin(10)
MODER寄存器為IO端口功能寄存器
Cortex‐M3的位帶操作代碼
//IO輸入輸出設(shè)置
#define SDA_IN() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}
//SDA=PB_11;SCL=PB_10
#define IIC_SCL PBout(10) //SCL
#define IIC_SDA PBout(11) //SDA
#define READ_SDA PBin(11) //SDA設(shè)為輸入
CRH為Cortex‐M3的端口功能寄存器
但是由于Cortex‐M0編譯存在問題,通過對規(guī)格書的查詢對比發(fā)現(xiàn)Cortex‐M0芯片不支持位帶操作
Cortex‐M3存在端口映射區(qū)是可以支持位帶操作。
Cortex‐M0不存在端口映射區(qū)是不支持位帶操作。
因此在編寫Cortex‐M0的程序時,可以不考慮位帶操作。