⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iar-

📁 IAR_example_EasyARM8962.zip
💻
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:                     Analog_Comparators_out_reg.c
** Last modified Date:            2007-09-20 
** Last Version:                  v1.0
** Description:                   Stellaris系列单片机模拟比较器的操作
** 
**--------------------------------------------------------------------------------------------------------
** Created By:                    Zhou Hai Xin
** Created date:                  2007-09-20 
** Version:                       v1.0
** Descriptions:                  使用两个电位器分别从PB4、PB6脚输入一路模拟信号,进行比较,
** 				                  比较的结果通过PB5连接到LED4显示,
**				                  同时读取比较器输出值送到LED5进行显示
**
**--------------------------------------------------------------------------------------------------------
** Modified by:                   Kang qinhua
** Modified date:                 2008.01.13
** Version:                       v1.1
** Description:
**
*********************************************************************************************************/
#define HWREG(x)				(*((volatile unsigned long *)(x)))

#define SYSCTL_RCGC1            0x400fe104                              /*  运行模式时钟门控寄存器1     */
#define SYSCTL_RCGC2			0x400fe108                              /*  运行模式时钟门控寄存器2     */
#define SYSCTL_PERIPH_GPIOA		0x20000001                              /*  GPIO B 在系统控制器中的地址 */
#define SYSCTL_PERIPH_GPIOB		0x20000002                              /*  GPIO B 在系统控制器中的地址 */
#define SYSCTL_PERIPH_COMP0     0x11000000                              /*  模拟比较器 0 在系统控制器中的
                                                                            地址                        */

#define GPIO_PORTA_BASE			0x40004000                              /*  GPIO B 口的基地址           */
#define GPIO_PORTB_BASE			0x40005000                              /*  GPIO B 口的基地址           */
#define GPIO_O_DIR				0x00000400                              /*  GPIO 数据方向寄存器         */
#define GPIO_O_AFSEL			0x00000420                              /*  GPIO 模式控制寄存器         */
#define GPIO_O_DATA				0x00000000                              /*  GPIO 数据寄存器             */
#define GPIO_O_DR4R             0x00000504                              /*  4mA驱动选择                 */
#define GPIO_O_DEN              0x0000051C                              /*  数字输入使能                */
	
#define COMP_O_ACSTAT0          0x00000020                              /*  Comp0 状态寄存器            */
#define COMP_BASE               0x4003C000                              /*  模拟比较器的基地址          */
#define COMP_O_ACCTL0           0x00000024                              /*  模拟比较器0的控制寄存器     */
#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 PA4 					(1<<4)                                  /*  PA4为LED5                   */
#define PB4 					(1<<4)                                  /*  PB4为VIN-                   */
#define PB6 					(1<<6)                                  /*  PB6连接VIN+                 */
#define PB5 					(1<<5)                                  /*  PB5为VOUT                   */

/*********************************************************************************************************
** 函数原形:int main(void)
** 功能描述:通过外部VIN1与VIN2电压进行比较,通过比较的结果来控制LED3和LED4的状态
			 LED5将显示比较结果:亮:VIN+ < VIN-;灭:VIN+ > VIN-。
			 LED4将显示比较结果:亮:VIN+ > VIN-;灭:VIN+ < VIN-。
** 参数说明:无
** 返回值:  0
*********************************************************************************************************/
int main(void)
{
    HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOA & 0x0fffffff;            /*  使能GPIO PA口               */
    HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOB & 0x0fffffff;            /*  使能GPIO PB口               */
    HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_COMP0 & 0x0fffffff;            /*  使能模拟比较器0             */

    HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) |= PB4 | PB6 ;                /*  设置 PB4 和 PB6 为外设控制  */
    HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) |= PB5 ;                      /*  设置 PF4 为外设控制         */

    HWREG(GPIO_PORTA_BASE + GPIO_O_DIR) |= PA4;                         /*  设置 PA4 为输出             */
    	                                                                /*设置为4mA驱动                 */
	HWREG(GPIO_PORTA_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTA_BASE + GPIO_O_DR4R) | PA4);
  
	                                                                    /*设置为推挽管脚                */
	HWREG(GPIO_PORTA_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTA_BASE + GPIO_O_DEN) | PA4);

        	                                                            /*设置为4mA驱动                 */
	HWREG(GPIO_PORTB_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTB_BASE + GPIO_O_DR4R) | PB5);
  
	                                                                    /*设置为推挽管脚                */
	HWREG(GPIO_PORTB_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTB_BASE + GPIO_O_DEN) | PB5);

  
                                                                        /*  配置模拟比较器              */
    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) {      /*  根据比较寄存器的状态显示LED5*/
		    HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (PA4 << 2))) = 0;
		} else {
		    HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (PA4 << 2))) = PA4;
		}
    }

}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -