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.
我们在调试RM42的开发板的时候发现一个问题。请大家帮忙看一下是否时候配置的问题。
编译: IAR7.1
调试:Jlink
MCU: rm42l432
在loopback模式下,首先利用一个GPIO管脚输出1,然后用MIBSPI输出数据的时候,发现SPI不能输出。
如果我们在GPIO输出和MIBSPI输出之间添加1个延时代码(比如说一个空跑的for循环),就会SPI输出。
这种现象在CCS中没有出现。
第二个问题,我们想输出SPI信号到片外,用示波器查看是否SPI正常输出,所以想关闭loopback模式,
但关闭IO口的loopback和SPI的loopback,还是没有看到SPI输出信号,请教是否还需要其他的设定?
请参考附件例程。
/** @file example_SPI_Master_Slave.c * @brief Application main file * @date 25.July.2013 * @version 03.06.00 * * This file contains an example of SPI1 and SPI2 Master / Slave configurations. * * PIN Connections must be as Below * --------------- --------------- * SPI1 ( Master ) SPI2 ( SLave) * --------------- --------------- * SIM0 ---> SIMO * S0MI <--- SOMI * CLK ---> CLK * CS0 ---> CS0 * * ------------------ * GUI configurations * ------------------ * 1) Driver TAB * - Select SPI2 * - Select SPI1 * 2) VIm Channel 0-31 * - Enable SPI2 Level 0 and Level 1 channels. * 3) SPI2 TAB * - SPI2 Global SubTAB * - Uncheck Master Mode * - Uncheck Internal Clock * - SPI2 Port SubTAB * - Uncheck DIR for CS 0 * 3) SPI1 TAB * - Have it default * 4) Generate Code. * */ /* (c) Texas Instruments 2009-2013, All rights reserved. */ /* * Copyright (C) 2009-2015 Texas Instruments Incorporated - www.ti.com * * * 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. * */ /* USER CODE BEGIN (0) */ /* USER CODE END */ /* Include Files */ #include "sys_common.h" #include "system.h" /* USER CODE BEGIN (1) */ #include "spi.h" /* USER CODE END */ /** @fn void main(void) * @brief Application main function * @note This function is empty by default. * * This function is called after startup. * The user can use this function to implement the application. */ /* USER CODE BEGIN (2) */ uint16 TX_Data_Master[16] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 }; uint16 TX_Data_Slave[16] = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 }; uint16 RX_Data_Master[16] = { 0 }; uint16 RX_Data_Slave[16] = { 0 }; /* USER CODE END */ void main(void) { /* USER CODE BEGIN (3) */ spiDAT1_t dataconfig1_t; dataconfig1_t.CS_HOLD = FALSE; dataconfig1_t.WDEL = TRUE; dataconfig1_t.DFSEL = SPI_FMT_0; dataconfig1_t.CSNR = 0xFE; /* Enable CPU Interrupt through CPSR */ _enable_IRQ(); /* Initialize SPI Module Based on GUI configuration * SPI1 - Master ( SIMO, SOMI, CLK, CS0 ) * SPI2 - Slave ( SIMO, SOMI, CLK, CS0 ) * */ spiInit(); /* Initiate SPI2 Transmit and Receive through Interrupt Mode */ spiSendAndGetData(spiREG2, &dataconfig1_t, 16, TX_Data_Slave, RX_Data_Slave); /* Initiate SPI1 Transmit and Receive through Polling Mode*/ spiTransmitAndReceiveData(spiREG1, &dataconfig1_t, 16, TX_Data_Master, RX_Data_Master); while(1); /* USER CODE END */ } /* USER CODE BEGIN (4) */ /* USER CODE END */