TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F5529 IIC接口驱动程序问题

你好,  

       我在使用MSP430f5529单片机驱动IIC接口USCI_B0和eeprom 24LC16B时遇到一些问题,为了简单测试,只是使用CCS的msp430ware中的例程作了稍许改动(SLAVE——ADDRESS,PORT这些),然后发现发送数据后SDA和SCL口完全没有电平变化(包括示波器边沿触发捕获测试和单步指令测试电平),起始条件UCTXSTT拉高后也不会清零,觉得就是完全没发数据,但是配置是按照例程来的,PORT不会弄错,不知道怎么回事呢?代码贴在下面:

#include <msp430.h>

unsigned char *PTxData; // Pointer to TX data
unsigned char TXByteCtr;

const unsigned char TxData[] = // Table of data to transmit
{
0x11,
0x22,
0x33,
0x44,
0x55
};

int main(void)
{
unsigned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

UCB0CTL1 |= UCSWRST; // Enable SW reset

UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCTR + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x50; // Slave Address 

P3SEL |= 0x03; // Assign I2C pins to USCI_B0

UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
UCB0IE |= UCTXIE; // Enable TX interrupt

while (1)
{
for(i=0;i<10;i++); // Delay required between transaction
PTxData = (unsigned char *)TxData; // TX array start address
// Place breakpoint here to see each
// transmit operation.
TXByteCtr = sizeof TxData; // Load TX byte counter

UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
__no_operation(); // Remain in LPM0 until all data
// is TX'd
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
}
}

//——————————————————————————
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loading TXByteCtr with the byte count. Also, TXData
// points to the next byte to transmit.
//——————————————————————————
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(UCB0IV,12))
{
case 0: break; // Vector 0: No interrupts
case 2: break; // Vector 2: ALIFG
case 4: break; // Vector 4: NACKIFG
case 6: break; // Vector 6: STTIFG
case 8: break; // Vector 8: STPIFG
case 10: break; // Vector 10: RXIFG
case 12: // Vector 12: TXIFG if (TXByteCtr) // Check TX byte counter
{
UCB0TXBUF = *PTxData++; // Load TX buffer
TXByteCtr–; // Decrement TX byte counter
}
else
{
UCB0CTL1 |= UCTXSTP; // I2C stop condition
UCB0IFG &= ~UCTXIFG; // Clear USCI_B0 TX int flag
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0
} default: break;
}
}

灰小子:

楼主可以参考下这个资料http://blog.csdn.net/xukai871105/article/details/10286599

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5529 IIC接口驱动程序问题
分享到: 更多 (0)