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.

AM335X_ICE_V2基于SYSBIOS的SPI1无法通讯问题

Other Parts Discussed in Thread: SYSBIOS

TI技术支持:

        您好!

        我在AM335x_ICE_V2开发板上欲实现基于SYSBIOS的SPI1 channel0的SPI通讯。现在的问题是,时钟引脚、片选引脚都能正常输出,但数据输出引脚不能输出,只是被拉低。不知道什么原因。我的代码是在I2C_LED历程上修改的。代码如下:

 

/*  * main.c  *  * Copyright (c) 2012 Texas Instruments Incorporated ALL RIGHTS RESERVED  *  */

#include <xdc/std.h>

#include <xdc/runtime/Error.h>

#include <xdc/runtime/System.h>

#include <ti/sysbios/BIOS.h>

 #include <ti/sysbios/knl/Task.h>

#include "gpio.h"

 #include "soc_AM335x.h"

#include "plat_utils.h"

 #include "plat_mux.h"

 #include "plat_led.h"

#include "osdrv_uart.h"

 #include "osdrv_mmu.h"

 #include "osdrv_version.h"

#include "plat_gpio.h"

 #include "osdrv_oledlcd.h"

 #include "osdrv_mcspi.h"

unsigned char uartInstance = 0;

 unsigned char boardType = 3;   //ICE v2

#define spi_Instance_1      1   //SPI1 be selected

#define spi_ClockDivider_1  96   //96 divider

 #define spi_Dir_D0inD1out   0   //D1 input D0 output

 #define spi_Channel_0       0   //Channel0 be selected

#define spi_Channel_1       1   //Channel0 be selected

unsigned char string[1]={'5'};

//Pin MUX  CONTROL_MODULE REGISTERS OFFSET

 #define PIN_MCASP0_ACLKX     0x0990

#define PIN_MCASP0_FSX       0x0994

 #define PIN_MCASP0_AXR0      0x0998

#define PIN_MCASP0_AHCLKR    0x099c

#define PIN_XDMA_EVENT_INTR0 0x09b0

#define PIN_UART0_RTSN       0x096c

MUX_CONFIG icev2Mux[] = {    

{ 0x0920 , 7 , AM335X_PIN_OUTPUT }, // mii1_txd2 -> LED_1    

 { 0x091C , 7 , AM335X_PIN_OUTPUT }, // mii1_txd3 -> LED_2    

 { 0x092C , 7 , AM335X_PIN_OUTPUT }, //  MII1_TXCLK -> LED_3    

{ 0x0880 , 7 , AM335X_PIN_OUTPUT }, // GPMC_CSN(1) -> LED_4    

 { 0x09B0 , 7 , AM335X_PIN_OUTPUT }, //  XDMA_EVENT_INTR(0) -> LED_5    

 { 0x09B4 , 7 , AM335X_PIN_OUTPUT }, //  XDMA_EVENT_INTR(1) -> LED_6

 { PIN_MCASP0_ACLKX , 3, AM335X_PIN_OUTPUT},    //  PIN_SPI1_SCLK,mod3 (A13)

 { PIN_MCASP0_FSX ,   3, AM335X_PIN_INPUT},     //  PIN_SPI1_D0, INput mod3 (B13)    

{ PIN_MCASP0_AXR0,   3, AM335X_PIN_OUTPUT_PULLUP },  //PIN_SPI1_D1,OUTput mod3    

{ PIN_MCASP0_AHCLKR, 3, AM335X_PIN_OUTPUT},    // PIN_SPI1_CS0,mod3 (C12)  

{ PIN_XDMA_EVENT_INTR0, 4, AM335X_PIN_OUTPUT_PULLUP},  // PIN_SPI1_CS1,mod3 (A15)

   { 0x0988 , 0 , AM335X_PIN_INPUT_PULLUP },  // I2C0_SCL    

 { 0x098c , 0 , AM335X_PIN_INPUT_PULLUP }, // I2C0_SDA    

{0xFFFFFFFF,0,0}    

 };

 SYS_MMU_ENTRY applMmuEntries[] = {

    {(void*)0x48300000,0},  //PWM - Non bufferable| Non Cacheable    

 {(void*)0x48200000,0},  //INTCPS,MPUSS - Non bufferable| Non Cacheable    

 {(void*)0x48100000,0},  //I2C2,McSPI1,UART3,UART4,UART5, GPIO2,GPIO3,MMC1 - Non bufferable| Non Cacheable    

 {(void*)0x48000000,0},  //UART1,UART2,I2C1,McSPI0,McASP0 CFG,McASP1 CFG,DMTIMER,GPIO1 -Non bufferable| Non Cacheable    

 {(void*)0x44E00000,0},  //Clock Module, PRM, GPIO0, UART0, I2C0, - Non bufferable| Non Cacheable    

 {(void*)0x4A300000,0},  //PRUSS1 - Non bufferable| Non Cacheable     {(void*)0x49000000,0},  //EDMA3 - Non bufferable| Non Cacheable    

{(void*)0x4A100000,0},  //CPSW - Non bufferable| Non Cacheable     {(void*)0xFFFFFFFF,0xFFFFFFFF}       };

 

/*  *  ======== taskFxn ========  */ Void taskFxn(UArg a0, UArg a1) {    

 

unsigned char led_val = 0xff;  //   char t_str[8];

    System_printf("enter taskFxn()\n");

 LEDInit();      

 LEDDIGOUTSetVal(led_val);    

 Task_sleep(2000);    

 led_val = 0;   

  LEDDIGOUTSetVal(led_val);   

  Task_sleep(1000);

  LEDGPIOSetVal(0,16 ,0);  

 LEDGPIOSetVal(0,17 ,0);   

LEDGPIOSetVal(0,19 ,0);  

 LEDGPIOSetVal(0,20 ,0);   

LEDGPIOSetVal(1,30 ,0);   

LEDGPIOSetVal(3,9 ,0);

    while(1)     {      

McSPIWrite(spi_Instance_1, string, 1, spi_Channel_0 );

 int i=0;        

 for(i=0; i<655; i++); 

   }

/*  *  ======== main ========  */

Void main() {    

Task_Handle task;    

Error_Block eb;

    MMUInit(applMmuEntries);

    boardType = UTILsDetectBoardType();

    Error_init(&eb);

    task = Task_create(taskFxn, NULL, &eb);    

 if (task == NULL) {        

 System_printf("Task_create() failed!\n");        

 BIOS_exit(0);    

}

  uartInstance = 3;   

PinMuxConfig(icev2Mux);

    //SPI1,Channel0 initial    

McSPIInit(spi_Instance_1, spi_ClockDivider_1, spi_Dir_D0inD1out, MCSPI_MULTI_CH, spi_Channel_0);    

McSPIInit(spi_Instance_1, spi_ClockDivider_1, spi_Dir_D0inD1out, MCSPI_MULTI_CH, spi_Channel_1);

    UartOpen(uartInstance,NULL);     BIOS_start();     /* enable interrupts and start SYS/BIOS */

 }

示波器的截图如下:绿色的是片选,黄色的是时钟,红色的是D1即信号输出线。