主题中讨论的其他器件:Energia、 MSP430WARE
我使用 MSP-430G2553作为主器件从传感器读取值、并在 Energia 中进行编程。 我的示波器上的数据看起来不错、但我想将其输出到 Serial.println。
当我添加 Serial.begin(9600时)、我收到以下错误。 "内核.a (USCI_ISR_handler.c.o):在函数`_ISR_6'中:"
有人能告诉我如何在本示例中实施串行监视器吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我使用 MSP-430G2553作为主器件从传感器读取值、并在 Energia 中进行编程。 我的示波器上的数据看起来不错、但我想将其输出到 Serial.println。
当我添加 Serial.begin(9600时)、我收到以下错误。 "内核.a (USCI_ISR_handler.c.o):在函数`_ISR_6'中:"
有人能告诉我如何在本示例中实施串行监视器吗?
尊敬的 Patrick:
您是否使用以下示例代码"master_reader"?
//线缆主读卡 器// Nicholas Zambetti <http://www.zambetti.com> // 演示了线缆库的使用 //从 I2C/TWI 从器件读取数据 //参考与此一起使用的“线缆从发送器”示例 //创建于2006年3月29日 //此示例代码位于公共域中。 #include void setup() { Wire.begin(); //加入 i2c 总线(主器件的可选地址) Serial.begin(9600);//开始串行输出 } void loop() { Wire.requestFrom (2、6);//从从从器件#2请求6个字节 while (Wire.available ())//从器件发送的数据可能小于请求 的{ char c = Wire.read();//接收一个作为字符的字节 serial.print(c); //打印字符 } 延迟(500); }
此致、
James
MSP 客户应用
您好!
这也是我要引用的代码。 感谢您的帮助。
/*-版权所有-、BSD_EX
*版权所有(c) 2012、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*
秘书长的报告
*
* MSP430代码示例免责声明
*
* MSP430代码示例是通常包含的低级程序
*高度演示单个外设功能或器件功能
*简明扼要。 为此、代码可能依赖于器件的加电默认值
*寄存器值和设置、如时钟配置和注意
*在组合多个示例中的代码时应采取这种方法、以避免潜在的问题
*效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
*用于外设配置的 API 函数库方法。
*
*--/版权--*/
//
// MSP430G2xx3演示-来自 MSP430从器件的 USCI_B0 I2C 主器件 TX/RX 多个字节
//在 TX 和 RX 操作之间重复启动。
//
//说明:此演示通过 I2C 总线连接两个 MSP430。 主器件
//发送到从器件,然后生成重复起始,接着是
//接收操作。 这是主代码。 此代码演示了如何操作
//使用 USCI_B0 TX 实现一个带有 USCI 模块的 I2C 重复起始
//中断。
// ACLK = n/a、MCLK = SMCLK = BRCLK =默认 DCO =~1.2MHz
//
//***与 msp430x22x4_uscib0_i2c_13.c***一起使用
//
///|\/|\
// MSP430F24x 10k MSP430G2xx3
//从器件||主器件
//------------ |||---
//-|XIN P3.1/UCB0SDA|-|--+-|P3.1/UCB0SDA XIN|-
//|||||
//-|XOUT ||| XOUT|-
//| P3.2/UCB.S.|<---- |P3.2/UCB.S.|
//||||
//
// D. Dang
// Texas Instruments Inc.
// 2011年2月
//使用 CCS 版本4.2.0和 IAR Embedded Workbench 版本:5.10构建
//
#include
#define NUM_bytes_TX 3 //有多少字节?
#define NUM_bytes_RX 2.
int RXByteCtr、RPT_Flag = 0;//启用重复启动(如果为1)
volatile unsigned char RxBuffer[128];//分配128字节的 RAM
unsigned char * PTxData;//指向 TX 数据的指针
unsigned char * PRxData;//指向 RX 数据的指针
无符号字符 TXByteCtr、RX = 0;
unsigned char MSData = 0x00;
void Setup_TX (void);
void Setup_RX (void);
void transmit (void);
接收无效(无效);
void Debug (void);
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
P1SEL |= BIT6 + BIT7;//将 I2C 引脚分配给 USCI_B0
P1SEL2|= BIT6 + BIT7;//将 I2C 引脚分配给 USCI_B0
while (1){
//传输过程
Setup_TX();
RPT_Flag = 1;
Transmit ();
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
//接收过程
Setup_RX();
receive();
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
}
}
///----------------------------------
// USCI_B0数据 ISR 用于移动从 I2C 从设备接收到的数据
//到 MSP430内存。 它的结构使其可用于接收
//通过预加载 RXByteCtr 并进行字节计数,可获得任意2+个字节。
///----------------------------------
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCIAB0TX_vector
_interrupt void USCIAB0TX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0TX_vector)) USCIAB0TX_ISR (void)
其他
错误编译器不受支持!
#endif
{
if (RX = 1){//主机接收?
RXByteCtr --;//递减 RX 字节计数器
IF (RXByteCtr)
{
* PRxData++= UCB0RXBUF;//将 RX 数据移动到地址 PRxData
}
其他
{
if (RPT_Flag = 0)
UCB0CTL1 |= UCTXSTP;//无重复起始:停止条件
if (RPT_Flag = 1){//如果重复起始:不执行任何操作
RPT_Flag = 0;
}
* PRxData = UCB0RXBUF;//将最终的 RX 数据移动到 PRxData
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0
}
}
else{//主机发送
if (TXByteCtr)//检查 TX 字节计数器
{
UCB0TXBUF = MSData++;//加载 TX 缓冲区
TXByteCtr -;//减量 TX 字节计数器
}
其他
{
if (RPT_Flag = 1){
RPT_Flag = 0;
PTxData =&MSData;// TX 数组起始地址
TXByteCtr = NUM_Bytes_TX;//加载 TX 字节计数器
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);
}
否则{
UCB0CTL1 |= UCTXSTP;// I2C 停止条件
IFG2 &=~UCB0TXIFG;//清除 USCI_B0 TX 内部标志
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0
}
}
}
}
void Setup_TX (void){
_disable_interrupt ();
RX = 0;
IE2 &=~UCB0RXIE;
while (UCB0CTL1 & UCTXSTP);//确保发送停止条件//禁用 RX 中断
UCB0CTL1 |= UCSWRST;//启用 SW 复位
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;// I2C 主器件、同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持软件复位
UCB0BR0 = 12;// fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x48;//从器件地址为048h
UCB0CTL1 &=~UCSWRST;//清除 SW 复位,恢复运行
IE2 |= UCB0TXIE;//启用 TX 中断
}
void Setup_RX (void){
_disable_interrupt ();
RX = 1;
IE2 &=~UCB0TXIE;
UCB0CTL1 |= UCSWRST;//启用 SW 复位
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;// I2C 主器件、同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持软件复位
UCB0BR0 = 12;// fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x48;//从器件地址为048h
UCB0CTL1 &=~UCSWRST;//清除 SW 复位,恢复运行
IE2 |= UCB0RXIE;//启用 RX 中断
}
void transmit (void){
PTxData =&MSData;// TX 数组起始地址
TXByteCtr = NUM_Bytes_TX;//加载 TX 字节计数器
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX、启动条件
//_bis_SR_register (CPUOFF + GIE);//输入 LPM0、带中断
}
void receive (void){
PRxData =(unsigned char *) RxBuffer;// RX 缓冲区开始
RXByteCtr = NUM_Bytes_RX-1;//加载 RX 字节计数器
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
Debug();//启用 RX 中断
UCB0CTL1 |= UCTXSTT;// I2C 启动条件
//_bis_SR_register (CPUOFF + GIE);//输入 LPM0、带中断
}
void Debug (void){
_disable_interrupt ();
//Serial.print (* PRxData);
IE2 |= UCB0RXIE;
}