Other Parts Discussed in Thread: CCSTUDIO
器件型号:MSP432P401R
工具/软件:Code Composer Studio
我有许多较旧的 msp432p401r (黑板)
当前使用 CCS 版本:6.1.1.00022
MSP432器件支持文件 6.1.0.6 com.ti.ccstudio.msp432.emu.win32.feature.group 德州仪器(TI)
问题是我喜欢直接编写代码、问题是示例中的语法使用此格式
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST; //保持 eUSCI_B 处于复位状态
而我习惯使用这种格式进行编码
UCB0CTLW0 |= UCSWRST; /*软件复位使能*/
我还遇到了中断问题
在 msp432_startup.ccs.c 第103行
" defaultISR、 /* EUSCIB0 ISR */
我将其更改为
EUSCIB0_IRQHandler
msp432p401r.h 也有一个中断矢量
EUSCIB0_IRQn = 20、 // 36 EUSCIB0中断*/
为什么有2个不同的 IRQ 处理程序 msp432_startup.ccs.c 和 msp432p401r.h
现在介绍 NVIC
新方法使用
//在 NVIC 模块中启用 eUSCIB0中断
NVIC->ISER[0]= 1 <<((EUSCIB0_IRQn)& 31);
OLD 首选
NVIC_ISER0 |= INTISR20; // eUSCI_B0
摘自 msp432p401r_classic.h
#define INTISR20 0x00100000 // eUSCI_B0
真正的问题是、当我运行代码时、它永远不会到达我的代码位于下面的中断例程
一直在做一个例程来初始化从器件、但很不幸、我还有一个逻辑分析仪、我可以看到起始位以及从器件地址、 然后时钟变为低电平并通过 TXing 的任何数据挂起、就像中断从未被执行并且 TXBUFFER 从未被载入一样、这是因为中断没有被处理。
此外、我还收到了大量这些警告
说明 资源 路径 位置 类型
#2120-D 静态函数"EUSCIB0_IRQHandler"被视为 extern、因为它被引用但未定义 msp432_startup_ccs.c /blk_sensor_version2 行45 C/C++ problem
在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第3160行中声明的"ADDMASK_M"不兼容重新定义 。ccspsproject /blk_sensor_verion2 行13192、外部位置:ccs_base\ccs_c+\ccs_c+ ccs_ble6 r_classic.h"的第3160行中声明不兼容重新定义 msp432p401r.h
在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第3159行中声明的宏"ADDMASK_OFS"的#48-D 不兼容重新定义 。ccsproject /blk_sensor_ver2 行13191、外部位置:\ccs_base\ccs_ccs_cprice\ccs_ccs_ccs_cepic 6 r.h" msp432p401r.h
#48-D 不兼容的宏"ADDRX_M"重新定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第3157行声明) 。ccsproject /blk_sensor_verion2 行13189、外部位置:ccs_base\ccs_c+\ccs_c+ ccs_cep_c\bl6 r_classic.h" msp432p401r.h
#48-D 不兼容的宏"ADDRX_OFS"重新定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第3156行声明) 。ccsproject /blk_sensor_ver2 行13188、外部位置:\ccs_base\ccs_ccs_cprice\ccs_cepic 6 r_ccs_ccs_class.h msp432p401r.h)
#48-D 宏"AESBLKCNT_M"的不兼容重定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第1619行声明) 。ccsproject /blk_sensor_version2 行9229、外部地址\ccs_ccs_base\ccs+\ccs_r_classic.h" msp432p401r.h
#48-D 不兼容的宏"AESBLKCNT_OFS"重新定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第1618行声明) 。ccsproject /blk_sensor_version2 行9228、ccs_base\include\msp432p401r_classic.h" msp432p401r.h :ccs_ccs_classic.h
#48-D 不兼容的宏"AESBLKCNT0"的重新定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第1620行声明) 。ccsproject /blk_sensor_version2 行9219、外部位置:\ccs_base\ccs_ccs_ctry.h" msp432p401r.h
#48-D 宏"AESBLKCNT1"的不兼容重定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第1621行声明) 。ccsproject /blk_sensor_ver2 行9220、外部位置:\ccs_base\ccs_c+ ccs_cprice\ccs_cepic 6 r.h" msp432p401r.h
#48-D 不兼容的宏"AESBLKCNT2"的重新定义(在"C:\ti_blk_ccs6\ccsv6\ccs_base\arm\include\msp432p401r_classic.h"的第1622行声明) 。ccsproject /blk_sensor_ver2 行9221、外部位置:\ccs_base\ccs_ccs_c+ cprice\ccs_ccs_ccs_cepic 6 r.h" msp432p401r.h
//
//
// A0 P5.5*
// A1 P5.4*
// A2 P5.3//
A3 P5.2*
// A4 P5.1*
// A5 P5.0*
// A6 P4.7*
// A7 P4.6*
// A8 P4.5*
// A9 P4.4*
// A10 P4.3*
// A11 P4.2*
// A12 P4.1*
// A13 P6.1*// A13 P4.0*
// A13 P4.0*/ A14 P6.1* A16 P9.1#
// A17 P9.0#
// A18 P8.7#
// A19 P8.6#
// A20 P8.5#
// A21 P8.4#
// A22 P8.3#
// A23 P8.2#
//
////// I2c P1.6*
// I2c
到 LCD
//P0 P3 P2 P4 P5 P6 P7
//RS R/W E X D0 D1 D2 D3 D4 D5 D6 D7
//
//
#include "MSP.h"
void LCD_init (void);
volatile UINT32_t TXData_x = 0x00;
volatile UINT32_t TXData_y = 0x00;
uint32_t TXData[64];//
uint32_t TXData_value;//
uint32_t i = 0x0000;//
void (main)
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P1SEL0 |= BIT6 | BIT7; // I2C 引脚 P1.6=SDA P1.7=SCL
NVIC_ICPR0 = 0xFFFFFFFF;// CLR INT
NVIC_ICPR1 = 0xFFFFFFFF;// CLR INT
NVIC_ISER0 |= INTISR20;// 1 <<(((EUSCIB0_IRQn)& 31); //在 NVIC 模块中启用 eUSCIB0中断
//将 USCI_B0配置为 I2C 模式
lcd_init();
UCB0CTLW0 |= UCSWRST;//保持 RST
UCB0CTLW0 = UCSWRST | UCTR |UCMODE_3 | UCMST | UCSYNC | UCSSEL_SMCLK;// I2C、TX、Mstr
UCB0CTLW1 |= UCASTP_1;//在字节 CTR 值后停止发送
UCB0BRW = 0x001E;//波特率= SMCLK /30
UCB0CTLW0 &=~UCSWRST;// CLR RST 保持
UCB0IE |= UCTXIE0 | UCNACKIE;//启用中断
__ENABLE_INTERRUPT ();
UCB0CTLW0 |= UCTXSTP;//发送停止并尝试重新启动
(I = 300;I > 0;I--);//终止一段时间
UCB0I2CSA = 0x27;// UCTXLW0
| UCB0T 地址 //发送启动
while (UCB0STATW 和0x0010)//检查总线是否繁忙
{
__NO_OPERATION ();//进行调试
}
void LCD_init (void)//使用 A2004 LCD 以及 PCF8574 I2C 到8位输出
{
TXData[0x00]= 0x22;//设置为4位
TXData = 0x02[0x02]; //丢弃"E"以接受数据
//现在4位为高电平然后低
电平 TXData[0x02]= 0x22;
TXData[0x03]= 0x02;
TXData[0x04]= 0x20;
TXData[0x05]= 0x00;
TXData[0x06]= 0x20; //复位显示
TXData[0x07]= 0x00;
TXData[0x08]= 0x21;
TXData[0x09]= 0x01;
TXData[0x0A]= 0xA4;// A
TXData[0x0B]= 0x84;
TXData[0x0C]= 0xA1;
TXData[0x0D]= 0x81;TXData[0x84]
= 0x08]
;TXData[0x84]= 0x08];TXData[0x08]= 0x08]= 0x08];TXData[TXData[0x84]= 0x08]= 0x84];TXData[0x08]= 0x08]= 0x08];TXData[TXData[TXData[0x84]= 0x08]= 0x08];TXData[0x08]= 0x08]= 0x08]
TXData[0x14]= 0xA3;
TXData[0x15]= 0x83;
TXData[0x16]= 0xA4;// D
TXData[0x17]= 0x84;
TXData[0x18]= 0xA4;
TXData[0x19]= 0x84;
TXData[0x1A]= 0xFFFF;// ETXData[0x1B]
= 0xFFF]
;TXData[0xFFF]= 0xFFF];TXData[0xFFF]= 0xFFFF;TXData[0x1]= 0xFFFF.FFF]= 0x1FFF]
void EUSCIB0_IRQHandler (void)//从未执行
{
if (UCB0IFG & UCTXIFG0)// TX 缓冲区为空
{
if (TXData[TXData_x]= 0xFFFF)
{
UCB0CTLW0 |= UCTXSTP;// TX A STOP 条件
__NO_OPERATION ();
}
{UCB0CTLW0+
}= UCBTXTXBUT = UCTX+缓冲区;// TXTXBUT = UCB0TXBUT = UCTX+= UCB0TXBUT = UCB0TXBUT = UCTX+
}
if (UCB0IFG 和 UCNACKIFG)//接收到 NACK
{
UCB0CTLW0 |= UCTXSTP;//发送停止并尝试重新启动
(I = 300;I > 0;I -);//终止一些时间
}
感谢您的任何帮助
此致
罗马
msp432_startup.ccs.c