Quantcast
Channel: MSP low-power microcontrollers
Viewing all articles
Browse latest Browse all 62309

Forum Post: RE: MSP432P401R: Trouble with SPI communication to MAX7291 IC on MSP432 Launchpad and driverlib

$
0
0
Hey Chris, Thanks a lot. Disabling the interrupt made the code to progress further. But I guess that the SPI Communication is not happening. Nothing on the LED matrix. Here my code: /* * ------------------------------------------- * MSP432 DriverLib - v3_21_00_05 * ------------------------------------------- * * --COPYRIGHT--,BSD,BSD * Copyright (c) 2016, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * --/COPYRIGHT--*/ /****************************************************************************** * MSP432 SPI - 3-wire Master Incremented Data * * This example shows how SPI master talks to SPI slave using 3-wire mode. * Incrementing data is sent by the master starting at 0x01. Received data is * expected to be same as the previous transmission. eUSCI RX ISR is used to * handle communication with the CPU, normally in LPM0. Because all execution * after LPM0 is in ISRs, initialization waits for DCO to stabilize against * ACLK. * * Note that in this example, EUSCIB0 is used for the SPI port. If the user * wants to use EUSCIA for SPI operation, they are able to with the same APIs * with the EUSCI_AX parameters. * * ACLK = ~32.768kHz, MCLK = SMCLK = DCO 3MHz * * Use with SPI Slave Data Echo code example. * * MSP432P401 * ----------------- * | | * | P4.3|-> Chip Select * | | * | P1.6|-> Data Out (UCB0SIMO) * | | * | P1.7| * | | * | P1.5|-> Serial Clock Out (UCB0CLK) * Author: Timothy Logan *******************************************************************************/ /* DriverLib Includes */ #include "driverlib.h" /* Standard Includes */ #include #include #include /* Statics */ static volatile uint8_t RXData = 0; static uint8_t TXData = 0; static uint8_t ii = 0; // MAX7219 SPI LED Driver #define MAX7219_TEST 0x0F // in real code put into a .h file #define MAX7219_BRIGHTNESS 0x0A // in real code put into a .h file #define MAX7219_SCAN_LIMIT 0x0B // in real code put into a .h file #define MAX7219_DECODE_MODE 0x09 // in real code put into a .h file #define MAX7219_SHUTDOWN 0x0C // in real code put into a .h file /* SPI Master Configuration Parameter */ const eUSCI_SPI_MasterConfig spiMasterConfig = { EUSCI_B_SPI_CLOCKSOURCE_SMCLK, // SMCLK Clock Source 3000000, // SMCLK = DCO = 3MHZ 500000, // SPICLK = 500khz EUSCI_B_SPI_MSB_FIRST, // MSB First EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT, // Phase EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH, // High polarity EUSCI_B_SPI_3PIN // 3Wire SPI Mode }; void send16BitData(uint8_t addr, uint8_t value){ GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN3); // CS LOW //while (!(SPI_getInterruptStatus(EUSCI_B0_BASE,EUSCI_B_SPI_TRANSMIT_INTERRUPT))); /* Polling to see if the TX buffer is ready */ TXData = addr; SPI_transmitData(EUSCI_B0_BASE, TXData); // Send address. //while (!(SPI_getInterruptStatus(EUSCI_B0_BASE,EUSCI_B_SPI_TRANSMIT_INTERRUPT))); /* Polling to see if the TX buffer is ready */ TXData = value; SPI_transmitData(EUSCI_B0_BASE, TXData); // Send value. GPIO_setOutputHighOnPin(GPIO_PORT_P4, GPIO_PIN3); //Finish transfer. CS HIGH // for(ii=0;ii P4.3 = CS */ GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN3); GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN3); /* Selecting P1.0 as LED */ GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0); GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0); /* Delaying waiting for the module to initialize */ for(ii=0;ii<100;ii++); //Enable Mode B - decode mode send16BitData(0x09, 0x00); for (int j=0; j<400; j++); //some delay GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //Toggle LED //Use Lowest Intensity send16BitData(0x0A, 0x03); for (int j=0; j<400; j++); //some delay GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //Toggle LED // scan limit send16BitData(0x0B, 0x07); for (int j=0; j<400; j++); //some delay GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //Toggle LED //Turn on Chip send16BitData(0x0C, 0x01); for (int j=0; j<400; j++); //some delay GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //Toggle LED //Display test - disable send16BitData(0x0F, 0x00); for (int j=0; j<400; j++); //some delay GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //Toggle LED unsigned char disp1[19][8]={ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Heart Pattern 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00, 0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00, 0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00, 0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20, 0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60, 0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60, 0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60, // Heart Pattern }; while(1){ for(int h=0;h<19;h++) { for(int k=1;k<9;k++) send16BitData(k,disp1[h][k-1]); for (int j=0; j<1000; j++); //some delay GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //Toggle LED } } //PCM_gotoLPM0(); //__no_operation(); } //****************************************************************************** // //This is the EUSCI_B0 interrupt vector service routine. // //****************************************************************************** void EUSCIB0_IRQHandler(void) { uint32_t status = SPI_getEnabledInterruptStatus(EUSCI_B0_BASE); uint32_t jj; SPI_clearInterruptFlag(EUSCI_B0_BASE, status); if(status & EUSCI_B_SPI_RECEIVE_INTERRUPT) { /* USCI_B0 TX buffer ready? */ while (!(SPI_getInterruptStatus(EUSCI_B0_BASE, EUSCI_B_SPI_TRANSMIT_INTERRUPT))); RXData = SPI_receiveData(EUSCI_B0_BASE); /* Send the next data packet */ SPI_transmitData(EUSCI_B0_BASE, ++TXData); /* Delay between transmissions for slave to process information */ for(jj=50;jj<50;jj++); } } Should I try to use some other module base other than B0? Some people have used EUSCI_A0_MODULE and some other have used EUSCI_B0_MODULE but I am not able to find it in the documentation .

Viewing all articles
Browse latest Browse all 62309

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>