This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问f28335的mcbsp配成spi后,波特率怎么配置?



我需要用McBSP配置成SPI,用来与W5500通讯,但是中间有个波特率不知道怎配,请大家指点!

  • 传输波特率是由CLKGDV决定,它是一个CLKG的分频数值,从0到255.

    您可以看一下

    另外我们有相关的例程,您可以看一下

    //###########################################################################
    // Description:
    //! \addtogroup f2833x_example_list
    //! <h1>McBSP Digital Loop Back using SPI Mode (mcbsp_spi_loopback)</h1>
    //!
    //! This program will execute and transmit words until terminated by the user.
    //!
    //! By default for the McBSP examples, the McBSP sample rate generator (SRG) input
    //! clock frequency is LSPCLK (150E6/4 or 100E6/4) assuming SYSCLKOUT = 150 MHz or
    //! 100 MHz respectively.  If while testing, the SRG input frequency
    //! is changed, the #define MCBSP_SRG_FREQ  (CPU_SPD/4) in the Mcbsp.c file must
    //! also be updated accordingly.  This define is used to determine the Mcbsp initialization
    //! delay after the SRG is enabled, which must be at least 2 SRG clock cycles.
    //!
    //! \b Watch \b Variables \n
    //! - sdata1
    //! - sdata2
    //! - rdata1
    //! - rdata2
    //
    //
    //###########################################################################
    // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
    // $Release Date: November  1, 2016 $
    // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
    //             http://www.ti.com/ ALL RIGHTS RESERVED $
    //###########################################################################
    
    #include "DSP28x_Project.h"     // Device Headerfile and Examples Include File
    
    // Prototype statements for functions found within this file.
    
    void init_mcbsp_spi(void);
    void mcbsp_xmit(int a, int b);
    void error(void);
    
    // Global data for this example
    Uint16 sdata1 = 0x000;    // Sent Data
    Uint16 rdata1 = 0x000;    // Received Data
    
    Uint16 sdata2 = 0x000;    // Sent Data
    Uint16 rdata2 = 0x000;    // Received Data
    
    void main(void)
    {
    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the DSP2833x_SysCtrl.c file.
       InitSysCtrl();
    
    // Step 2. Initialize GPIO:
    // This example function is found in the DSP2833x_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
    // InitGpio();  // Skipped for this example
    // For this example, only enable the GPIO for McBSP-A
       InitMcbspaGpio();
    
    // Step 3. Clear all interrupts and initialize PIE vector table:
    // Disable CPU interrupts
       DINT;
    
    // Initialize PIE control registers to their default state.
    // The default state is all PIE interrupts disabled and flags
    // are cleared.
    // This function is found in the DSP2833x_PieCtrl.c file.
       InitPieCtrl();
    
    // Disable CPU interrupts and clear all CPU interrupt flags:
       IER = 0x0000;
       IFR = 0x0000;
    
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    // This will populate the entire table, even if the interrupt
    // is not used in this example.  This is useful for debug purposes.
    // The shell ISR routines are found in DSP2833x_DefaultIsr.c.
    // This function is found in DSP2833x_PieVect.c.
       InitPieVectTable();
    
    // Step 4. Initialize all the Device Peripherals:
    // This function is found in DSP2833x_InitPeripherals.c
    // InitPeripherals();     // Not required for this example
    
    // Step 5. User specific code,
        init_mcbsp_spi();
        sdata1 = 0x55aa;
        sdata2 = 0xaa55;
    
    // Main loop to transfer 32-bit words through MCBSP in SPI mode periodically
        for(;;)
        {
           mcbsp_xmit(sdata1,sdata2);
           while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}         // Master waits until RX data is ready
           rdata2 = McbspaRegs.DRR2.all;                      // Read DRR2 first.
           rdata1 = McbspaRegs.DRR1.all;                      // Then read DRR1 to complete receiving of data
           if((rdata2 != sdata2)&&(rdata1 != sdata1)) error( ); // Check that correct data is received.
           delay_loop();
           sdata1^=0xFFFF;
           sdata2^=0xFFFF;
           __asm("    nop");                                    // Good place for a breakpoint
        }
    }
    
    
    // Some Useful local functions
    void error(void)
    {
        __asm("     ESTOP0");  // test failed!! Stop!
        for (;;);
    }
    
    void init_mcbsp_spi()
    {
         // McBSP-A register settings
        McbspaRegs.SPCR2.all=0x0000;		 // Reset FS generator, sample rate generator & transmitter
    	McbspaRegs.SPCR1.all=0x0000;		 // Reset Receiver, Right justify word, Digital loopback dis.
        McbspaRegs.PCR.all=0x0F08;           //(CLKXM=CLKRM=FSXM=FSRM= 1, FSXP = 1)
        McbspaRegs.SPCR1.bit.DLB = 1;
        McbspaRegs.SPCR1.bit.CLKSTP = 2;     // Together with CLKXP/CLKRP determines clocking scheme
    	McbspaRegs.PCR.bit.CLKXP = 0;		 // CPOL = 0, CPHA = 0 rising edge no delay
    	McbspaRegs.PCR.bit.CLKRP = 0;
        McbspaRegs.RCR2.bit.RDATDLY=01;      // FSX setup time 1 in master mode. 0 for slave mode (Receive)
        McbspaRegs.XCR2.bit.XDATDLY=01;      // FSX setup time 1 in master mode. 0 for slave mode (Transmit)
    
    	McbspaRegs.RCR1.bit.RWDLEN1=5;       // 32-bit word
        McbspaRegs.XCR1.bit.XWDLEN1=5;       // 32-bit word
    
        McbspaRegs.SRGR2.all=0x2000; 	 	 // CLKSM=1, FPER = 1 CLKG periods
        McbspaRegs.SRGR1.all= 0x000F;	     // Frame Width = 1 CLKG period, CLKGDV=16
    
        McbspaRegs.SPCR2.bit.GRST=1;         // Enable the sample rate generator
    	delay_loop();                        // Wait at least 2 SRG clock cycles
    	McbspaRegs.SPCR2.bit.XRST=1;         // Release TX from Reset
    	McbspaRegs.SPCR1.bit.RRST=1;         // Release RX from Reset
        McbspaRegs.SPCR2.bit.FRST=1;         // Frame Sync Generator reset
    }
    
    void mcbsp_xmit(int a, int b)
    {
        McbspaRegs.DXR2.all=b;
        McbspaRegs.DXR1.all=a;
    }
    
    
    //===========================================================================
    // No more.
    //===========================================================================