2335|0

910

帖子

656

TA的资源

五彩晶圆(初级)

楼主
 

TIVA C Launchpad的相关程序(周计划之第五周) [复制链接]

在main.c中包含头文件,编写中断函数KeyISR和主函数
/*
* main.c
*/
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "inc/hw_ints.h"
#define SYS_CLOCK        50000000                   //CPU时钟频率
#define KEY GPIO_PIN_4                                //按键USE_SW1引脚宏定义
#define RED_LED  GPIO_PIN_1             //红色LED灯宏定义
#define BLUE_LED GPIO_PIN_2                //蓝色LED灯宏定义
#define GREEN_LED GPIO_PIN_3                //绿色LED灯宏定义
long key_value = 0;                //按键值
//**********************************************************************
//本工程使用PF4上的按键采用中断方法依次点亮和熄灭RGB三色LED灯(PF1,PF2,PF3)
//**********************************************************************
void main(void)
{
        inti = 0;
       long temp = 0;
        //使用外部16M晶振,使用PLL,系统时钟设为50MHz
       SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL |
                              SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
        //使能按键和LED所在的GPIO
       SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        //初始化LED灯引脚,设置为输出
       GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,RED_LED | BLUE_LED | GREEN_LED);
        //配置LED灯引脚:最大输出电流2mA,推拉输出
       GPIOPadConfigSet(GPIO_PORTF_BASE,RED_LED | BLUE_LED| GREEN_LED,
                                GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);
        //初始化按键引脚,设置为输入
       GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,KEY);
        //配置按键引脚:弱上拉输入
       GPIOPadConfigSet(GPIO_PORTF_BASE,KEY,
                                         GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
        //设置GPIO中断方式:上升沿触发
       GPIOIntTypeSet(GPIO_PORTF_BASE,KEY,GPIO_RISING_EDGE);
        //使能按键引脚的GPIO中断
       GPIOPinIntEnable(GPIO_PORTF_BASE,KEY);
       IntEnable(INT_GPIOF);
       while(1)
        {
               //如果按键按下进入事件处理
               if(key_value & KEY)
               {
                        switch(i)
                        {
                        case 0://红灯翻转
                                temp =GPIOPinRead(GPIO_PORTF_BASE,RED_LED);
                               GPIOPinWrite(GPIO_PORTF_BASE,RED_LED,~temp);
                                key_value&= ~KEY;
                                i = 1;
                                break;
                        case 1://蓝灯翻转
                                temp =GPIOPinRead(GPIO_PORTF_BASE,BLUE_LED);
                               GPIOPinWrite(GPIO_PORTF_BASE,BLUE_LED,~temp);
                                key_value&= ~KEY;
                                i = 2;
                                break;
                        case 2://绿灯翻转
                                temp =GPIOPinRead(GPIO_PORTF_BASE,GREEN_LED);
                               GPIOPinWrite(GPIO_PORTF_BASE,GREEN_LED,~temp);
                                key_value &= ~KEY;
                                i = 0;
                                break;
                        }
               }
               else
               {
               }
        }
}
void KeyISR(void)
{
        //读取中断状态
        key_value =GPIOPinIntStatus(GPIO_PORTF_BASE,true);
        //清中断标志
       GPIOPinIntClear(GPIO_PORTF_BASE,key_value);
        //延时约10ms
       SysCtlDelay(10 * (SYS_CLOCK / 3000));
}
ADC多通道序列采样的程序
/*
* main.c
*/
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/adc.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#define VREF 3300.0    //参考电压3.3V
//******************************************************************
//本工程使用ADC0的采样序列1来实现多通道序列采样,采样序列1支持4个步进,
//我们使用了三个步进,采样的通道依次为为CH0(PE3),CH1(PE2),CH2(PE1),
//******************************************************************
void main(void)
{
       unsigned long value[3];                                //采样的数据
       unsigned short voltage[3];                        //转换后的电压
        //设置PLL,ADC时钟为16MHz
       SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL |
                               SYSCTL_XTAL_16MHZ);
        //使能ADC0
       SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
        //使能ADC采样通道所在管脚对应的GPIO
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
        //设置GPIOE的PIN1,PIN2,PIN3为ADC功能引脚
       GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_1 |GPIO_PIN_2 |GPIO_PIN_3);
        //配置前先禁止ADC采样序列
       ADCSequenceDisable(ADC0_BASE,1);
        //配置ADC0,采样序列为1,采用处理器触发启动采样,优先级0
       ADCSequenceConfigure(ADC0_BASE,1,ADC_TRIGGER_PROCESSOR,0);
        //设置ADC0的步进0(即序列的第一个采样):输入通道0
       ADCSequenceStepConfigure(ADC0_BASE,1,0,ADC_CTL_CH0);
        //设置ADC0的步进1:输入通道1
       ADCSequenceStepConfigure(ADC0_BASE,1,1,ADC_CTL_CH1);
        //设置ADC0的步进2:输入通道2,中断使能,并说明这是采样序列的终止(最后一步)
       ADCSequenceStepConfigure(ADC0_BASE,1,2,ADC_CTL_CH2 |
                        ADC_CTL_IE |ADC_CTL_END );
        //使能ADC采样序列1
       ADCSequenceEnable(ADC0_BASE,1);
        //清ADC采样序列1中断
       ADCIntClear(ADC0_BASE,1);
       while(1)
        {
               //触发ADC转换
               ADCProcessorTrigger(ADC0_BASE,1);
               //等待转换完成
               while(!ADCIntStatus(ADC0_BASE,1,false))
               {
               }
               //读采样序列FIFO中的采样结果(一次性将所有step的数据都读出)
               ADCSequenceDataGet(ADC0_BASE,1,value);
               //延时
               //SysCtlDelay(SysCtlClockGet());
               //将采样数据则算成电压(单位mV)
               voltage[0] = value[0] / 4096.0 * VREF;
               voltage[1] = value[1] / 4096.0 * VREF;
               voltage[2] = value[2] / 4096.0 * VREF;
        }
}
 
点赞 关注
个人签名天下难事,必做于易;天下大事,必做于细。
与其博览群书,不如精读一本。

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表