搜索
bottom↓
回复: 2

msp430f6779和MR25H10之间的spi通信问题求解

[复制链接]

出0入0汤圆

发表于 2014-6-19 11:08:26 | 显示全部楼层 |阅读模式
MR25H10这个系列的资料网上很少,最近在调试SPI通信。短接MSP430的RX,TX。调试程序,没问题。说明初始化正确。可是正常调试,发送数据到MR25H10里。返回观察就不行。好像根本就写不进去。程序现在只是简单的修改MR25H10的状态寄存器。然后把状态寄存器的值读出来,发送到430里,并显示。可是就是不对。返回值是0x00.大家有没有调试过MR25H10这个系列的。分享一下。谢谢!
#include <msp430f6779.h>
void Init_Lcd(void);              //lcd系统初始化
void Init_Ucs(void);              //msp430的系统初始化
void Lcd_Display(void);           //显示函数
//void TIMER_A0(void);             //定时器A0初始化
char Hour = 0,Minute = 0 ,Second = 0;
unsigned char MST_Data, SLV_Data;
void dis(void);
//void Init_Rtc(void);
void Init_Spi_B1(void);
//void Write_Mr25h10(int addr,unsigned char indata);  
//void Read_Mr25h10(int addr);
void Read_Sr(void);
/*********************************************************
//  ACLK = ~32.768kHz, MCLK = SMCLK = DCO ~ 1048kHz.  BRCLK = SMCLK/2
/                       MSP430F67791
//                    -----------------
//               /|\ |                 |
//                |  |                 |
//                +->|RST          P1.0|-> LED
//                   |                 |
//                   |             P4.5|-> Data Out (UCA0SIMO)
//                   |                 |
//                   |             P4.4|<- Data In (UCA0SOMI)
//                   |                 |
//                   |             P4.6|-> Serial Clock Out (UCA0CLK)
//                   |                 |         
//                   |             P4.7| -> CS
*************************************************************/
/************  Segment LCD Code Map***********/
const unsigned char LCD_Char_Map[] =
{
          BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT6,       // '0'
          BIT4 | BIT6,                                   // '1'
          BIT0 | BIT1 | BIT3 | BIT5 |BIT6,               // '2'
          BIT0 | BIT3 | BIT4 | BIT5 | BIT6,              // '3'
          BIT2 | BIT4 | BIT5 | BIT6,                     // '4'
          BIT0 | BIT2 | BIT3 | BIT4 | BIT5,              // '5'
          BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5,       // '6'
          BIT3 | BIT4 | BIT6,                            // '7'
          BIT0 | BIT1 | BIT2 | BIT3 |BIT4 | BIT5 | BIT6, // '8'
          BIT0 | BIT2 | BIT3 |BIT4 | BIT5 | BIT6,        // '9'
};

void Init_Lcd(void)
{
        // Setup LCD_C
        // LCD_FREQ = ACLK/32/4, LCD Mux 4, turn on LCD
        // LCD_BLK_FREQ = ACLK/512
        LCDCCTL0 = LCDDIV_31 | LCDPRE_1 | LCD4MUX | LCDON;//LCD_C Control Register初始化,设置LCD的时钟频率,工作模式,并且打开LCD
       
        //Charge pump generated internally at 2.96V, external bias (V2-V4) generation
        //Internal reference for charge pump
        //LCD_C Voltage Control Register
        LCDCVCTL =  LCDCPEN | VLCD_2_60;
       
        LCDCPCTL0 = 0XFFFF;   //SELECT LCD SEGMENT 0-23
        LCDCPCTL1 = 0X00FF;       
        
        //LCDCBLKCTL = LCDBLKPRE2_L | LCDBLKPRE0_L | LCDBLKMOD_1 ;   /* LCD_C Blinking mode: Individual */
}
void Init_Ucs(void)
{
        // Initialize LFXT1
    UCSCTL6 &= ~(XT1OFF);                   // Enable XT1
    UCSCTL6 |= XCAP_3;                      // Internal load cap

    // Loop until XT1, XT2 & DCO fault flag is cleared
    do
    {
        UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
        // Clear XT2,XT1,DCO fault flags
        SFRIFG1 &= ~OFIFG;                  // Clear fault flags
    } while (SFRIFG1 & OFIFG);              // Test oscillator fault flag
   // UCSCTL3 |= SELREF_2;                   // Set DCO FLL reference = REFO
   // UCSCTL4 |= SELA_2;                     // Set ACLK = REFO

    //UCSCTL4 |= SELA1 + SELA0 ;   // ACLK = 011b DCOCLK  
    // UCSCTL4 |= SELA1 ;   //ACLK = 010 REFOCLK   
}

void Init_Spi_B1(void)
{
    // Setup P4.7 output, P3.0 UCA0SOMI, P3.1 UCA0SIMO, P3.2 UCA0CLK
    P4OUT &= ~BIT7;                               // Clear P4.7
    P4DIR |= BIT7;                                // Set P4.7 to output direction
    P4SEL0 |= BIT4 | BIT5 | BIT6;                  // Set P4.4,P4.5,P4.6 to non-IO
       
    // Setup eUSCI_B1
    UCB1CTLW0 |= UCSWRST;                         // **Put state machine in reset**
    UCB1CTLW0 |= UCMST  | UCSYNC | UCCKPL | UCMSB;// 3-pin, 8-bit SPI master
                                                  // Clock polarity high, MSB
    UCB1CTLW0 |= UCSSEL_2;                        // SMCLK
    UCB1BRW_L = 0x02;                             // /2
    UCB1BRW_H = 0;                                //
    //UCB1MCTLW = 0;                                // No modulation
    UCB1CTLW0 &= ~UCSWRST;                        // **Initialize USCI state machine**
    UCB1IE = UCRXIE ;                             // Enable USCI_B1 RX,TX interrupt
     __delay_cycles(100);                          // Wait for slave to initialize
     
}

void Read_Sr(void)
{
   // MST_Data = 0x01;                              // Initialize data values
     P4OUT |= BIT7 ;   //拉高CS
     __delay_cycles(500);
     P4OUT &= ~BIT7;   //拉低CS
    while (!(UCB1IFG & UCTXIFG)) ;                // USCI_A0 TX buffer ready?
    UCB1IFG &= ~UCTXIFG ; //发送中断标志位清零
    UCB1TXBUF = 0x06;                         // MR25H10 WREN
    __delay_cycles(20);
    while (!(UCB1IFG & UCTXIFG)) ;                // USCI_A0 TX buffer ready?
   __delay_cycles(20);
    //P4OUT |= BIT7 ;   //拉高CS
     __delay_cycles(500);
     //P4OUT &= ~BIT7;   //拉低CS
    while (!(UCB1IFG & UCTXIFG)) ;                // USCI_A0 TX buffer ready?
    UCB1IFG &= ~UCTXIFG ; //发送中断标志位清零
    UCB1TXBUF = 0x01;                         // MR25H10 WRSR
     __delay_cycles(11);
    while (!(UCB1IFG & UCTXIFG)) ;                // USCI_A0 TX buffer ready?
    UCB1IFG &= ~UCTXIFG ; //发送中断标志位清零
    UCB1TXBUF = 0x12;                         // MR25H10 DATA
    while (!(UCB1IFG & UCTXIFG)) ;                // USCI_A0 TX buffer ready?
   __delay_cycles(20);
    P4OUT |= BIT7 ;   //拉高CS
    //__delay_cycles(200);
   // P4OUT |= BIT7 ;   //拉高CS
    __delay_cycles(200);
    P4OUT &= ~BIT7;   //拉低CS
    while (!(UCB1IFG & UCTXIFG)) ;                // USCI_A0 TX buffer ready?
    UCB1IFG &= ~UCTXIFG ; //发送中断标志位清零
    UCB1TXBUF = 0x05;                         // MR25H10 DATA
     while (!(UCB1IFG & UCTXIFG)) ;
    // __delay_cycles(20);
     
}
void main(void)
{
     WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
     
     Init_Ucs();          //Set system clock
     Init_Lcd();          //Lcd Init
     Init_Spi_B1();     //Init_Spi
     LCDM1 |= BIT7;
     LCDM2 |= BIT7;
     
     __bis_SR_register(GIE);     // Enter LPM0 w/ interrupt
      Read_Sr();
     //Write_Mr25h10(0x0001,0x17);
     //Read_Mr25h10(0x0001);  
    while (1)
    {
     
      dis();
    }

}

// USCI_B1 interrupt service routine
#pragma vector=USCI_B1_VECTOR
__interrupt void USCI_B1_ISR(void)
{
    switch (__even_in_range(UCB1IV, 4))
    {
        case USCI_NONE: break;              // No interrupt
        case USCI_SPI_UCRXIFG:              // RXIFG
           //while (!(UCB1IFG & UCTXIFG)) ;        // USCI_A0 TX buffer ready?
           Second = UCB1RXBUF ;
           dis();
           __delay_cycles(500);   
           break;
        case USCI_SPI_UCTXIFG:
          UCB1IFG &= ~UCTXIFG ; //发送中断标志位清零
          __no_operation();
         
          break;       // TXIFG
        default: break;
    }
}

void dis(void)
{
     LCDM12 =  LCD_Char_Map[0];   //Hour 高位
     LCDM11 =  LCD_Char_Map[0]; //Hour 低位
     
     LCDM10 =  LCD_Char_Map[0];   //Minute 高位
     LCDM9 =   LCD_Char_Map[0]; //Minute 低位
     
     LCDM8 =  LCD_Char_Map[Second / 16];   //Second 高位
     LCDM7 =  LCD_Char_Map[Second % 16]; //Second 低位
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-6-19 11:09:25 | 显示全部楼层
MR25H10的datasheet

出0入0汤圆

 楼主| 发表于 2014-6-19 11:10:37 | 显示全部楼层
MR25H10的datasheet

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 14:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表