LM3S用C语言编写驱动有两种方式
一,直接操作寄存器
二,使用官方提供的API函数
一般编程时需要考虑的东西
1,引入哪些头文件,存储空间选择是否正确,时钟设置,
2,是不是需要中断,中断配置
3,模块是否需要使能
4,具体的相关配置
5,正确的使用
以下就两种方式进行详述
一,直接操作寄存器
引入头文件
1,阅读数据手册,查看涉及到的片上资源如何使用--比如使能GPIO
2,配置相关的寄存器--模拟数字,输入输出,是否上拉等
3,IO数据写入 读取
//*****************************************************************************
#include "inc/lm3s9b92.h"
int main(void)
{
volatile unsigned long ulLoop;
SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;
ulLoop = SYSCTL_RCGC2_R;
GPIO_PORTF_DIR_R = 0x0C;
GPIO_PORTF_DEN_R = 0x0C;
while(1)
{
GPIO_PORTF_DATA_R |= 0x0C;
for(ulLoop = 0; ulLoop < 200000; ulLoop++)
{
}
GPIO_PORTF_DATA_R &= ~(0x0C);
for(ulLoop = 0; ulLoop < 200000; ulLoop++)
{
}
}
}
二,使用官方提供的API函数
文本
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_ints.h>
#include <interrupt.h>
#include <sysctl.h>
#include <gpio.h>
//*****************************************************************************
//通过 key触发相应管脚中断
//进入中断后,翻转 LED电平
//
//*****************************************************************************
int main(void)
{
时钟初始化:晶振,6MHz
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ);
//用户 LED灯所对应的管脚为 PC5
// 使能 LED所在的 GPIO端口
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
// 设置 LED所在管脚为输出
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
// 使能 KEY所在的 GPIO端口
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);
// 设置 KEY所在管脚为输入
GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_LOW_LEVEL);
// 设置 KEY管脚的中断类型
GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4);
// 使能 KEY所在管脚的中断
IntEnable(INT_GPIOC);
// 使能 GPIOD端口中断
IntMasterEnable();
// 使能处理器中断
for(; ; )
{ }
}
// GPIOD的中断服务函数
void GPIO_Port_C_ISR(void)
{
unsigned char ucVal;
unsigned long ulStatus;
ulStatus = GPIOPinIntStatus(GPIO_PORTC_BASE, true); // 读取中断状态
GPIOPinIntClear(GPIO_PORTC_BASE, ulStatus); // 清除中断状态,重要
if (ulStatus & GPIO_PIN_4) // 如果 KEY 的中断状态有效
{
ucVal = GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_5); / / 翻转 LED
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, ~ucVal);
SysCtlDelay(300000);
// 延时约 10ms,消除按键抖动
while (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0x00);
// 等待 KEY抬起
SysCtlDelay(300000);
// 延时约 10ms,消除松键抖动
}
}