3732|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430F5438A的spi例程 [复制链接]

TI公司的一个关于MSP430F5438A的spi例子。
下面是msater的程序。
#define SPICLK                          500000

unsigned char transmitData = 0x00, receiveData = 0x00;  
unsigned short returnValue = 0x00;                     

void main (void)
{
    //Stop watchdog timer  
    WDT_hold(__MSP430_BASEADDRESS_WDT_A__);

    //Set P1.1 for slave reset  
    GPIO_setOutputHighOnPin(
        __MSP430_BASEADDRESS_PORT1_R__,
        GPIO_PORT_P1,
        GPIO_PIN1
        );

    //Set P1.0 to output direction  
    GPIO_setAsOutputPin(__MSP430_BASEADDRESS_PORT1_R__,
        GPIO_PORT_P1,
        GPIO_PIN0
        );

    //P3.5,4,0 option select   
    GPIO_setAsPeripheralModuleFunctionInputPin(__MSP430_BASEADDRESS_PORT3_R__,
        GPIO_PORT_P3,
        GPIO_PIN5 + GPIO_PIN4 + GPIO_PIN0
        );

    //Initialize Master  
    returnValue = SPI_masterInit(__MSP430_BASEADDRESS_USCI_A0__,
        SPI_CLOCKSOURCE_SMCLK,
        UCS_getSMCLK(__MSP430_BASEADDRESS_UCS__),
        SPICLK,
        SPI_MSB_FIRST,
        SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT,
        SPI_CLOCKPOLARITY_INACTIVITY_HIGH
        );

    if (STATUS_FAIL == returnValue){
        return;
    }

    //Enable SPI module  
    SPI_enable(__MSP430_BASEADDRESS_USCI_A0__);

    //Enable Receive interrupt  
    SPI_enableInterrupt(__MSP430_BASEADDRESS_USCI_A0__, SPI_RECEIVE_INTERRUPT);

    //Now with SPI signals initialized, reset slave
    GPIO_setOutputLowOnPin(
        __MSP430_BASEADDRESS_PORT1_R__,
        GPIO_PORT_P1,
        GPIO_PIN1
        );

    //LED On
    GPIO_setOutputHighOnPin(
        __MSP430_BASEADDRESS_PORT1_R__,
        GPIO_PORT_P1,
        GPIO_PIN0
        );

    //Wait for slave to initialize
    __delay_cycles(100);

    //Initialize data values
    transmitData = 0x00;

    //USCI_A0 TX buffer ready?
    while (!SPI_getInterruptStatus(__MSP430_BASEADDRESS_USCI_A0__,
               SPI_TRANSMIT_INTERRUPT)) ;

    //Transmit Data to slave
    SPI_transmitData(__MSP430_BASEADDRESS_USCI_A0__, transmitData);

    //CPU off, enable interrupts  CPU停止,启用中断LPM0
    __bis_SR_register(LPM0_bits + GIE);
}

//******************************************************************************
//
//This is the USCI_B0 interrupt vector service routine
//
//******************************************************************************
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR (void)
{
    switch (__even_in_range(UCA0IV,4)){
        //Vector 2 - RXIFG
        case 2:
            //USCI_A0 TX buffer ready?  USCI_A0 TX 寄存器准备好了吗?
            while (!SPI_getInterruptStatus(__MSP430_BASEADDRESS_USCI_A0__,
                       SPI_TRANSMIT_INTERRUPT)) ;

            receiveData = SPI_receiveData(__MSP430_BASEADDRESS_USCI_A0__);

            //Increment
            transmitData++;
            //Send next value
            SPI_transmitData(__MSP430_BASEADDRESS_USCI_A0__,
            transmitData
            );

            //Delay between transmissions for slave to process information
            __delay_cycles(40);

            break;
        default: break;
    }
}



还有一个slaver的程序。两个我分别使用两块MSP430F5438A的板子,接口就是两块板子的P3.0,P3.4,P3.5分别相连,然后主机的P1.1连接从机的RST(我的板子的RST是在JTAG里的一个脚),连接的就这些,还有就是我给主机供电,然后单步运行master的程序,能看到从机的led1灯亮但是很暗,这个是正常现象吗?能证明程序或是我连接使用的正确吗?不正确的话,那应该怎么修改呢?正确的现象又是什么呢?


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表