📄 analog_comparators_out_reg.c
字号:
//-----------------------------------------------------------------------------
// 功能描述:在 PB0 上输出方波,高电平为3.3V,低电平为0V。将 PB0 连接到模拟比较
// 器的输入脚 PB4,模拟比较器使用PB6上的输入电压,比较的结果在 PD7
// 上输出,PD7 连接到 LED2 以便观察实验现象。
//-----------------------------------------------------------------------------
#define HWREG(x) (*((volatile unsigned long *)(x)))
#define SYSCTL_RCGC1 0x400fe104 // 运行模式时钟门控寄存器1
#define SYSCTL_RCGC2 0x400fe108 // 运行模式时钟门控寄存器2
#define SYSCTL_PERIPH_GPIOB 0x20000002 // GPIO B 在系统控制器中的地址
#define SYSCTL_PERIPH_GPIOC 0x20000004 // GPIO C
#define SYSCTL_PERIPH_GPIOD 0x20000008 // GPIO D
#define SYSCTL_PERIPH_COMP0 0x11000000 // 模拟比较器 0 在系统控制器中的地址
#define GPIO_PORTB_BASE 0x40005000 // GPIO B 口的基地址
#define GPIO_PORTC_BASE 0x40006000 // GPIO Port C
#define GPIO_PORTD_BASE 0x40007000 // GPIO Port D
#define GPIO_O_DIR 0x00000400 // GPIO 数据方向寄存器
#define GPIO_O_AFSEL 0x00000420 // GPIO 模式控制寄存器
#define GPIO_O_DATA 0x00000000 // GPIO 数据寄存器
#define COMP_BASE 0x4003C000 // 模拟比较器的基地址
#define COMP_O_ACCTL0 0x00000024 // 模拟比较器0的控制寄存器
#define COMP_O_ACSTAT0 0x00000020 // Comp0 状态寄存器
#define COMP_TRIG_NONE 0x00000000 // 配置模拟比较器无ADC触发
#define COMP_ASRCP_REF 0x00000400 // 配置模拟比较器使用内部参考电压源
#define COMP_OUTPUT_NORMAL 0x00000100 // 配置模拟比较器正常输出
#define COMP_O_REFCTL 0x00000010 // 模拟比较器0的参考电压控制寄存器
#define COMP_REF_1_1V 0x00000308 // 配置模拟比较器的内部电压参考源为1.1V
#define COMP_ASRCP_PIN0 0x00000200 // Comp0+ pin
#define COMP_ASRCP_PIN 0x00000000 // Dedicated Comp+ pin
#define COMP_ACSTAT_OVAL 0x00000002 // Comparator 输出值
#define PB4 (1<<4) // PB4为VIN-
#define PB6 (1<<6) // PB6为C0+输入口
#define PC5 (1<<5) // PC5连接LED2
#define PD7 (1<<7) // PD7为VOUT
//-----------------------------------------------------------------------------
// 函数原形:int main(void)
// 功能描述:主函数
// 参数说明:无
// 返回值:0
//-----------------------------------------------------------------------------
int main(void)
{
// 使能GPIO PB口
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOB & 0x0fffffff;
// 使能GPIO PC口
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOC & 0x0fffffff;
// 使能GPIO PD口
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOD & 0x0fffffff;
// 使能模拟比较器0
HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_COMP0 & 0x0fffffff;
// 设置 PB4 和 PD7 为外设控制
HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) |= PB6 | PB4 ;
HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) |= PD7 ;
// 设置 PB0 为输出
HWREG(GPIO_PORTC_BASE + GPIO_O_DIR) |= PC5;
// 配置模拟比较器
HWREG(COMP_BASE + COMP_O_ACCTL0) = (COMP_TRIG_NONE | COMP_ASRCP_PIN0 | COMP_OUTPUT_NORMAL);
while (1)
{
if(HWREG(COMP_BASE + COMP_O_ACSTAT0) & COMP_ACSTAT_OVAL)//根据比较寄存器的状态显示LED
HWREG(GPIO_PORTC_BASE + (GPIO_O_DATA + (PC5 << 2))) = 0;
else
HWREG(GPIO_PORTC_BASE + (GPIO_O_DATA + (PC5 << 2))) = PC5;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -