您好!
我使用的是"Linux debian 3.16.0-4-AMD64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux" 、我已经设置了 MSP430-gcc 工具链并能够在我的 MSP430F2274上运行闪烁程序。 现在、我将介绍应用开发、在此之前、我想设置 UART 以进行调试。 但是、由于某种原因、我无法在终端上获取字节。 我已经交叉检查了我的代码、没有发现任何可能导致此问题的漏洞。 请在下面查找我的源代码、
gpio.c
/* include 的*/ #include /*定义*/ #define MAX_PIN_NO_INVALID ******255 / *函数名称:GPIO_configure *说明:将 GPIO 配置为 I/O *返回:0 =成功 -1 =失败 *参数:@port_no =端口号 @PINS_NO =端口中用于配置 的引脚 / signed char GPIO_configure (unsigned char port_no、unsigned char pins_no) { signed char ret = 0; if (pins_no > MAX_PIN_NO_INVALID) PORT_NO = 0; 开关(PORT_NO) { 案例1: P1DIR = PINS_NO; 中断; 案例2: P2DIR = PINS_NO; 中断; 案例3: P3DIR = PINS_NO; 中断; 案例4: P4DIR = PINS_NO; 中断; 默认值: RET =-1; } 返回(RET); } /********* *函数名称:GPIO_write *说明:将 GPIO 设置为高电平或低 电平*返回:0 =成功 -1 =失败 *参数:@port_no =端口号 @PINS_NO =用于设置高电平或低电平的引脚 / 有符号 char GPIO_write (unsigned char port_no、unsigned char pin_no_val) { signed char ret = 0; if (pin_no_val > MAX_PIN_NO_INVALID) PORT_NO = 0; 开关(PORT_NO) { 案例1: P1OUT = PIN_NO_Val; 中断; 案例2: P1OUT = PIN_NO_Val; 中断; 案例3: P1OUT = PIN_NO_Val; 中断; 案例4: P1OUT = PIN_NO_Val; 中断; 默认值: RET =-1; } 返回(RET); } /********* *函数名称:GPIO_Read *说明:读取 GPIO 的状态 *返回:0或1 =成功 -1 =失败 *参数:@port_no =端口号 @PINS_NO =待读取的引脚 / signed char GPIO_read (unsigned char port_no、unsigned char pin_no) { signed char ret = 0; if (pin_no = BIT0)||(pin_no = BIT1)||(pin_no = BIT2) ||(PIN_NO == BIT3)||(PIN_NO == BIT4)||(PIN_NO == BIT5) ||(PIN_NO == BIT6)||(PIN_NO == BIT7) { /*不执行任何操作*/ } 其他 { PORT_NO = 0; } 开关(PORT_NO) { 案例1: RET = P1IN & PIN_NO; 中断; 案例2: RET = P2IN 和 PIN_NO; 中断; 案例3: RET = P3IN 和 PIN_NO; 中断; 案例4: RET = P4IN 和 PIN_NO; 中断; 默认值: RET =-1; } 返回(RET); } /********* *函数名称:GPIO_mux *说明:选择 GPIO 备用函数 *返回 :0 =成功 -1 =失败 *参数 : @PORT_NO =端口号 @PINS_NO =引脚到多路复用器 / signed char GPIO_mux (unsigned char port_no、unsigned char pins_no) { signed char ret = 0; if (pins_no > MAX_PIN_NO_INVALID) PORT_NO = 0; 开关(PORT_NO) { 案例1: P1SEL|= PINS_NO; 中断; 案例2: P2SEL|= PINS_NO; 中断; 案例3: P3SEL|= PINS_NO; 中断; 案例4: P4SEL|= PINS_NO; 中断; 默认值: RET =-1; } 返回(RET); }
UART.c.
/* Lib 包括*/
#include
#include "GPIO_DRIVER.h"
/*定义*/
#define UARTA0_PORT_NO0x03//* P3 *
/#define UARTA0_PINS_MUX_VAL0x30// P3.4 (TXD)& P3.5 (RXD)*//
本地函数声明*/
static void UART_MUX_PINS ();
void-*-/UART-(-* static-/UART-)
函数定义-------------------------------------------------------- */
static void
UART_mux_pins ()
{
signed char ret;
if (ret = GPIO_mux (UARTA0_PORT_NO、UARTA0_PINS_MUX_VAL)=-1)
{
/*调试代码- LED 闪烁5次、表示出现故障*/
}
其他
{
/*调试代码- LED 闪烁2次、表示所有正常*/
}
}
静态空
UART_CONFIGURE ()
{
//寄存器设置*/
UCA0CTL0 = 0x00;
UCA0CTL1 |= UCSWRST + UCSSEL_2;
UCA0BR0 = 0x65;
UCA0BR1 = 0x03;
UCA0MCTL = UCBRS_1;
// UCA0BR0 |= UCATX2
~
;UCARXIE= UCA0ST2;UCARXIE*= UCA0MCTL |= UCARXIE2;UCARXIESD*= UCA0+ UCA0 = UCA0 |= UCA0;UCA0 = UCA0 = UCA0 = UCAST+ UCA0
/*启用全局/可屏蔽中断*/
_BIS_SR (GIE);
}
void
UART_init ()
{
UART_mux_pins ();
UART_configure ();
}/../../---------------
//
// 发送和接收中断 ///////---------------
//
#pragma vector = USCIAB0TX_Vector
__interrupt void
TransmitInterrupt (void)
{
GPIO_write (0x01、0x01);
}
#pragma vector = USCIAB0RX_vector
__interrupt void
ReceiveInterrupt (void)
{
IFG2 &&~UCA0RXIFG;
}
3.主要.c.
/* Lib 包括*/ #include #include "GPIO_DRIVER.h" #include "UART_DRIVER.h" int main () { signed char ret = 0; WDTCTL = WDTPW + WDTHOLD;//如果 (CALBC1_1MHz = 0xFF)则停止看门狗//如果校准常数被擦除 { 同时(1);//不加载,陷阱 CPU! } DCOCTL = 0;//选择最低 DCOx 和 MODx 设置 BCSCTL1 = CALBC1_8MHZ;//设置范围 DCOCTL = CALDCO_8MHZ;//设置 DCO 阶跃+调制 if (ret = GPIO_configure (1、0x01)=-1) { /*调试代码- LED 闪烁5次、表示出现故障*/ } UART_INIT (); UCA0TXBUF ='A'; }
目前、我只是希望从 MSP 向终端(/dev/ttyAMC0)发送一个字节。 我正在使用 MSP430 eZ430-RF2500开发工具。 我也尝试过环回测试、但不起作用。 为使其正常工作提供的任何支持都很有帮助。谢谢。
Vinay Divakar