最新在学习LM3S6911开发板子。和经典程序 Hello World! 程序是一样的,拿到开发板的第一个程序就是写一个流水灯的程序。
但是这个板子有个问题,使用板载的ISP来下载编译好的.bin文件很奇怪,能下载进去,但是现象不是想要的。但是改用ULinK2的时候就万事大吉了。好的就不废话了,先直接上代码。
#include "hw_memmap.h" #include "hw_types.h" #include "debug.h" #include "gpio.h" #include "sysctl.h" #ifdef DEBUG void __error__(char *pcFilename, unsigned long ulLine) { } #endif int main(void) { volatile unsigned long ulLoop; // // 设置系统运行时钟 // SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ); // // Configure the GPIO that drives the on-board LED. // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_DIR_MODE_OUT); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_DIR_MODE_OUT); //蜂鸣器 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_DIR_MODE_OUT); //按键 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_DIR_MODE_IN); //LED配置 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_DIR_MODE_OUT); while(1) { while(GPIOPinRead(GPIO_PORTE_BASE,GPIO_PIN_0)==0) { GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0); } // // 点亮灯 // GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_PIN_6); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7, 0); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, 0); // // 延迟一笑会 // for(ulLoop = 0; ulLoop < 200000; ulLoop++) { } // // 关灯. // GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 0); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_PIN_7); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0); // // 延迟一会. // for(ulLoop = 0; ulLoop < 200000; ulLoop++) { } } }
GPIODirModeGet 获得一个管脚的方向和模式。
函数原型:
unsigned long GPIODirModeGet(unsigned long ulPort, unsigned char ucPin)
参数:
ulPort 是 GPIO 端口的基址。
ucPin 是管脚编号。
描述:
这个函数获取所选 GPIO 端口某个特定管脚的方向和控制模式。 在软件控制下这个管脚可以配置成输入或输出,或者,管脚也可由硬件来控制。控制的类型和方向作为一个枚举数据类型被返回。
返回:
返回在 GPIODirModeSet()中描述的一个枚举数据类型。
GPIODirModeSet 设置指定管脚的方向和模式。
函数原型:
void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulPinIO)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed) 。
ulPinIO 是管脚方向“与/或”模式。
描述:
这个函数在软件控制下将所选 GPIO 端口的指定管脚设置成输入或输出,或者,也可以将管脚设置成由硬件来控制。
参数 ulPinIO 是一个枚举数据类型,它可以是下面的其中一个值:
GPIO_DIR_MODE_IN;
GPIO_DIR_MODE_OUT;
GPIO_DIR_MODE_HW。
在上面的值中,GPIO_DIR_MODE_IN 表明管脚将被编程用作一个软件控制的输入,GPIO_DIR_MODE_OUT 表 明 管 脚 将 被 编 程 用 作 一 个 软 件 控 制 的 输 出 ,GPIO_DIR_MODE_HW 表明管脚将被设置成由硬件进行控制。管脚用一个位组合(bit-packed)的字节来指定,这里的每个字节,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOIntTypeGet 获取管脚的中断类型。
函数原型:
unsigned long GPIOIntTypeGet(unsigned long ulPort, unsigned char ucPin)
参数:
ulPort 是 GPIO 端口的基址。
ucPin 是管脚编号。
描述:
这个函数获取所选 GPIO 端口上某个特定管脚的中断类型。管脚可配置成在下降沿、上升沿或两个边沿检测中断,或者,它也可以配置成在低电平或高电平检测中断。中断检测机制的类型作为一个枚举数据类型返回。
返回:
返回 GPIOIntTypeSet()中描述的一个枚举数据类型。
GPIOIntTypeSet 设置指定管脚的中断类型。
函数原型:
void GPIOIntTypeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulIntType)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是特定管脚的位组合(bit-packed)表示。
ulIntType 指定中断触发机制的类型。
描述:
这个函数为所选 GPIO 端口上特定的管脚设置不同的中断触发机制。参数 ulIntType 是一个枚举数据类型,它可以是下面其中的一个值:
GPIO_FALLING_EDGE;
GPIO_RISING_EDGE;
GPIO_BOTH_EDGES;
GPIO_LOW_LEVEL;
GPIO_HIGH_LEVEL。
在上面的值中,不同的值描述了中断检测机制(边沿或电平)和特定的触发事件(边沿检测的上升沿、下降沿或上升/下降沿,电平检测的低电平或高电平) 。管脚用一个位组合(bit-packed)的字节来指定,这里的每个字节,置位的位用来识别
被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。注:为了避免伪中断,用户必须确保 GPIO 输入在这个函数的执行过程中保持稳定。
返回:
无。
GPIOPadConfigGet 获取管脚的配置。
函数原型:
void GPIOPadConfigGet(unsigned long ulPort,unsigned char ucPin,unsigned long *pulStrength,unsigned long *pulPinType)
参数:
ulPort 是 GPIO 端口的基址。
ucPin 是管脚编号。
pulStrength 是输出驱动强度存放处的指针。
pulPinType 是输出驱动类型存放处的指针。
描述:
这个函数获取所选 GPIO 上某个特定管脚的端口配置。 pulStrength 和 pulPinType 返回的值与 GPIOPadConfigSet()中使用的值相对应。这个函数也可以获取用作输入管脚的管脚配
置;但是,返回的唯一有意义的数据是管脚终端连接的是上拉电阻还是下拉电阻。
返回:
无。
GPIOPadConfigSet 设置指定管脚的配置。
函数原型:
void GPIOPadConfigSet(unsigned long ulPort, unsigned char ucPins,unsigned long ulStrength,
unsigned long ulPinType)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是特定管脚的位组合(bit-packed)表示。
ulStrength 指定输出驱动强度。
ulPinType 指定管脚类型。
描述:
这个函数设置所选 GPIO 端口指定管脚的驱动强度和类型。 对于配置用作输入端口的管脚,端口按照要求配置,但是对输入唯一真正的影响是上拉或下拉终端的配置。
参数 ulStrength 可以是下面的一个值:
GPIO_STRENGTH_2MA;
GPIO_STRENGTH_4MA;
GPIO_STRENGTH_8MA;
GPIO_STRENGTH_8MA_SC。
在上面的值中,GPIO_STRENGTH_xMA 指示 2、4 或 8mA 的输出驱动强度;而GPIO_OUT_STRENGTH_8MA_SC 指定了带斜率控制(slew control)的 8mA 输出驱动。
参数 ulPinType 可以是下面的其中一个值:
GPIO_PIN_TYPE_STD;
GPIO_PIN_TYPE_STD_WPU;
GPIO_PIN_TYPE_STD_WPD;
GPIO_PIN_TYPE_OD;
GPIO_PIN_TYPE_OD_WPU;
GPIO_PIN_TYPE_OD_WPD;
GPIO_PIN_TYPE_ANALOG。
在上面的值中,GPIO_PIN_TYPE_STD*指定一个推挽管脚,GPIO_PIN_TYPE_OD*指定 一 个 开 漏 管 脚 , *_WPU 指 定 一 个 弱 上 拉 , *_WPD 指 定 一 个 弱 下 拉 ,GPIO_PIN_TYPE_ANALOG 指定一个模拟输入(对于比较器来说) 。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOPinIntClear 清除指定管脚的中断。
函数原型:
void GPIOPinIntClear(unsigned long ulPort, unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是特定管脚的位组合(bit-packed)表示。
描述:
清除指定管脚的中断。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注:由于在 Cortex-M3 处理器包含有一个写入缓冲区,处理器可能要过几个时钟周期才能真正把中断源清除。因此,建议在中断处理程序中要早些把中断源清除掉(反对在最后的操作中才清除中断源)以避免在真正清除中断源之前从中断处理程序中返回。操作失败可能会导致立即再次进入中断处理程序。 (因为NVIC 仍会把中断源看作是有效的) 。
返回:
无。
GPIOPinIntDisable关闭指定管脚的中断。
函数原型:
void GPIOPinIntDisable(unsigned long ulPort, unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
屏蔽指定管脚的中断。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被
访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOPinIntEnable 使能指定管脚的中断。
函数原型:
void GPIOPinIntEnable(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是特定管脚的位组合(bit-packed)表示。
描述:
不屏蔽指定管脚的中断。
管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOPinIntStatus 获取所指定 GPIO 端口的中断状态。
函数原型:
long GPIOPinIntStatus(unsigned long ulPort tBoolean bMasked)
参数:
ulPort 是 GPIO 端口的基址。
bMasked 指定返回的是屏蔽的中断状态还是原始的中断状态。
描述:
如果 bMasked 被设置成 True,则返回屏蔽的中断状态;否则,返回原始的中断状态。
返回:
返回一个位填充(bit-packed)的字节,在这个字节中,置位的位用来识别一个有效的屏蔽或原始中断,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。位
31:8 应该忽略。
GPIOPinRead 读取指定管脚上出现的值。
函数原型:
long GPIOPinRead(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
读取指定管脚(由 ucPins 指定的)的值。输入和输出管脚的值都能返回,ucPins 未指定的管脚的值被设置成 0。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
返回一个位填充的字节, 它提供了指定管脚的状态, 字节的位 0 代表 GPIO 端口管脚 0,
位 1 代表 GPIO 端口管脚 1,等等。ucPins 未指定的位返回 0。位 31:8 应该忽略。
GPIOPinTypeADC 配置管脚,使其作为模数转换输入使用。
函数原型:
void GPIOPinTypeADC(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
模数转换输入管脚必须正确配置,使其在 DustDevil-class 器件中能正常工作。这个函数为这些管脚提供合适的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注:这个函数不能把任何一个管脚变做 ADC 输入,它仅配置一个 ADC 输入来进行正确的操作。
返回:
无。
GPIOPinTypeCAN 配置管脚,使其用作一个 CAN 器件。
函数原型:
void GPIOPinTypeCAN(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed) )表示。
描述:
CAN 管脚必须正确配置, 使 CAN 外设能正常工作。 这个函数为这些管脚提供了一个典型的配置;其他配置的工作取决于板的设置(例如:使用片内上拉)管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。注:这个函数不能把任何管脚变为一个 CAN 管脚;它仅配置一个 CAN 管脚来进行正确操作。
返回:
无。
GPIOPinTypeComparator配置管脚用作一个模拟比较器的输入。
函数原型:
void GPIOPinTypeComparator(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
cPins 是管脚的位组合(bit-packed)表示。
描述:
模拟比较器输入管脚必须正确配置, 以便模拟比较器能正常工作。 这个函数为用作模拟比较器输入的管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注: 这个函数不能用来将任意管脚都变成一个模拟输入; 它只配置一个模拟比较器管脚进行正确操作。
返回:
无。
GPIOPinTypeGPIOInput配置管脚用作 GPIO 输入。
函数原型:
void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
GPIO 管脚必须正确配置,以便 GPIO 输入能正常工作。这一点,特别是对于 Fury-class器件来说是很重要的,在Furry-class 器件中,数字输入使能在默认状态下是关闭的。这个这个函数为用作 GPIO 管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOPinTypeGPIOOutput配置管脚用作 GPIO 输出。
函数原型:
void GPIOPinTypeGPIOOutput(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
GPIO 管脚必须正确配置,以便作为 GPIO 输出能正常工作。这一点,特别是对于Fury-class 器件来说是很重要的,在 Furry-class 器件中,数字输入使能在默认状态下是关闭的。这个这个函数为用作 GPIO 管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOPinTypeGPIOOutputOD 配置管脚用作 GPIO 开漏输出。
函数原型:
void GPIOPinTypeGPIOOutpuODt(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
GPIO 管脚必须正确配置,以便能作为GPIO 输出正常工作。这一点,特别是对于Fury-class 器件来说是很重要的,在 Furry-class 器件中,数字输入使能在默认状态下是关闭的。这个这个函数为用作 GPIO 管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。
GPIOPinTypeI2C 配置管脚供I 2 C外设使用。
函数原型:
void GPIOPinTypeI2C(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
I 2 C管脚必须正确配置,以便I2C外设能够正常工作。这个函数为用作I 2 C功能的管脚提供了正确配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注:这个函数不能用来将任意管脚都变成一个 I2C 管脚;它只配置一个 I2C 管脚来进行正确操作。
返回:
无。