Cortex‐M0的位带操作代码
//IO输出方向设置
#define SDA_IN() {GPIOA->MODER&=0XFFF1FFFF;} //PA_10设置成输入
#define SDA_OUT() {GPIOA->MODER&=0XFFF5FFFF;} //PA_10设置成输出
// 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输入输出设置
#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设为输入
CRH为Cortex‐M3的端口功能寄存器
但是由于Cortex‐M0编译存在问题,通过对规格书的查询对比发现Cortex‐M0芯片不支持位带操作
Cortex‐M3存在端口映射区是可以支持位带操作。
Cortex‐M0不存在端口映射区是不支持位带操作。
因此在编写Cortex‐M0的程序时,可以不考虑位带操作。