Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430FR4133 I2C总线在启动了开始信号后,SCL 变为低电平;

$
0
0

期间用了msp430提供的历程 ,下载运行也会停在while (!(UCB0IFG & UCTXIFG)),用超时机制跳过,重新开始 ,抓取到的波形如下:

只要发起开始信号,SCL就自然变为低电平。    

附件是源码

    GPIO_setAsPeripheralModuleFunctionInputPin(
        GPIO_PORT_P5,
        GPIO_PIN2 + GPIO_PIN3,
        GPIO_PRIMARY_MODULE_FUNCTION
    );

    /*
     * Disable the GPIO power-on default high-impedance mode to activate
     * previously configured port settings
     */
    PMM_unlockLPM5();
    __delay_cycles(1000); 
  
   UCB0CTLW0 |= UCSWRST;// Software reset enabled               
   UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC; // I2C mode, Master mode, sync
   UCB0CTLW0 |= UCSSEL_2 ;            // Use SMCLK, keep SW reset
   UCB0BRW = 10;                             // fSCL = SMCLK/10 = ~100kHz
   UCB0I2CSA = slaveAddress;                 // Slave Address is 048h
   UCB0CTL1 &= ~UCSWRST;                    // Clear SW reset, resume operation	





void I2C_write(unsigned char *TX_buffer, int writeLength)
{
	int i = 0;
	/* Clear USCI_B0 TX interrupt flag */
	UCB0IFG &= ~UCTXIFG; //
        
        while (UCB0CTL1 & UCTXSTP);         // Ensure stop condition got sent
        
        
	// Set UCB0 as I2C's TX mode, and send a START condition
	// This will also send out the slave address
	UCB0CTL1 |= UCTR | UCTXSTT;
	//Send the number of "writeLength" bytes out
	for (i = 0; i < writeLength; i++) {

		/* Wait for TX buffer to empty */
		while (!(UCB0IFG & UCTXIFG));
		
		/* Send pointer byte */
		UCB0TXBUF = *TX_buffer++;

	}	
	while (!(UCB0IFG & UCTXIFG));
	
	/* Generate Stop condition */
	UCB0CTL1 |= UCTXSTP;
	
	/* Wait for Stop to finish */
	while (UCB0CTL1 & UCTXSTP);
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles