Other Parts Discussed in Thread: MSP430FR6989
您好!
对于一个我正在使用2个 MSP430FR6989的项目、我需要它们以非常具体的方式相互通信(不能、我无法使用 I2C、SPI 或类似的其他协议)。 我需要使用 GPIO 端口通过一个地址提供(对于我来说、端口4、8和9)、而端口2通过数据提供。 然后、地址"转换"为存储数据的指针。
但是、我似乎无法读取 PxIN 寄存器中的并将连接到地址。 我甚至无法读取整个 Port2并将其放入变量中。 我检查了数据总线是否通过寄存器(在 CCS 调试器中)通过、它们确实通过。 这里的问题是什么?
代码:
#include #include "ram_module.h" /** * main.c */ int main (void) { PM5CTL0 &=~LOCKLPM5; WDTCTL = WDTPW | WDTHOLD;//停止看门狗定时器 //声明所有引脚 //控制端口 P3DIR |= 0b00000000;//第三个端口是 CSn 端口,这是只读 的 P3IE |= 0b00000111; P3IES |= 0x03; //在前两个引脚 P3IFG 上从高电平到低电平&=~0x03;//清除标志 __bis_SR_register (GIE); //启用中断 //地址端口(端口1:5、端口8:4、端口9:7),只读 P1DIR |= 0b00000000; P8DIR |= 0b00000000; P9DIR |= 0b00000000; //数据端口 P2SEL0 &= 0x00; P2DIR |= 0x00; //用于 调试 while (1) __no_operation(); } 返回0; }/* 每个端口只有一个矢量,只能写入一个 ISR。 *要区分一个中断矢量的不同中断源 、*在本例中为不同的端口引脚、您必须检查 ISR 中的 IFG 位。 // #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector=PORT3_vector __interrupt void Port_3 (void) #elif defined (__GNU__) void __attribute__((interrupt (PORT3_vector)))) Port_3 (void 编译器#error! #endif { uint16_t volatile * const address =(uint16_t *) getAddress (); //uint16_t* data =空; //data =地址; if (P3IFG&BIT0){ //P1OUT^= BIT0;数据被写入这个 MPC *地址= P2IN; } if (P3IFG&BIT1){//可以是另一个 //P1OUT^=BIT1;从 MPC 读取数据 P2DIR &= 0xFF;//置于写入模式 P2OUT =*地址; //address =地址+ 8; //P2OUT =*地址; __no_operation(); P2DIR &= 0x00;//置于读取模式 } P3IFG=0;//将所有标志设置为0 }
和 getAddress()方法:
内联 uint16_t getAddress(){ //uint16_t DATA_OUT = BYTE_MSB << 8 | BYTE_LSB; uint16_t byte_msb = P9OUT & 0b01111111; BYTE_MSB =(P9OUT << 8)|(P8OUT & 0b11110000); short byte_LSB =(P1OUT & 0b11111000)>> 3; uint16_t total_address = byte_msb << 1 | byte_LSB; __no_operation(); __no_operation(); 返回 TOTAL_ADDRESS; }