TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS570LS3137 SPI管脚上拉不起作用问题

公司有个项目用到Hercules,我采用的Hercules HDK开发板先开始调试软件,TMS570LS3137ZWT芯片

采用 hal code gen自动产生的spiInit

我想要控制SPI2的SIMO,SOMI管脚是上拉的,看了tms570ls3137  an章节25.9提到的寄存器的配置也是正确的,但是实际效果就是SIMO管脚总是逻辑低电平,没法被拉高。

请教论坛里面的高手指点,附上spiInit函数。此函数为hal code gen自动产生。

void spiInit(void)
{
/* USER CODE BEGIN (2) */
/* USER CODE END */

/** @b initialize @b SPI2 */

/** bring SPI out of reset */
spiREG2->GCR0 = 0U;
spiREG2->GCR0 = 1U;

/** SPI2 master mode and clock configuration */
spiREG2->GCR1 = (spiREG2->GCR1 & 0xFFFFFFFCU) | ((uint32)((uint32)1U << 1U) /* CLOKMOD */
| 1U); /* MASTER */

/** SPI2 enable pin configuration */
spiREG2->INT0 = (spiREG2->INT0 & 0xFEFFFFFFU)| (uint32)((uint32)0U << 24U); /* ENABLE HIGHZ */

/** – Delays */
spiREG2->DELAY = (uint32)((uint32)0U << 24U) /* C2TDELAY */
| (uint32)((uint32)0U << 16U) /* T2CDELAY */
| (uint32)((uint32)0U << 8U) /* T2EDELAY */
| (uint32)((uint32)0U << 0U); /* C2EDELAY */

/** – Data Format 0 */
spiREG2->FMT0 = (uint32)((uint32)0U << 24U) /* wdelay */
| (uint32)((uint32)0U << 23U) /* parity Polarity */
| (uint32)((uint32)0U << 22U) /* parity enable */
| (uint32)((uint32)0U << 21U) /* wait on enable */
| (uint32)((uint32)0U << 20U) /* shift direction */
| (uint32)((uint32)0U << 17U) /* clock polarity */
| (uint32)((uint32)1U << 16U) /* clock phase */
| (uint32)((uint32)199U << 8U) /* baudrate prescale */
| (uint32)((uint32)8U << 0U); /* data word length */
/** – Data Format 1 */
spiREG2->FMT1 = (uint32)((uint32)0U << 24U) /* wdelay */
| (uint32)((uint32)0U << 23U) /* parity Polarity */
| (uint32)((uint32)0U << 22U) /* parity enable */
| (uint32)((uint32)0U << 21U) /* wait on enable */
| (uint32)((uint32)0U << 20U) /* shift direction */
| (uint32)((uint32)0U << 17U) /* clock polarity */
| (uint32)((uint32)1U << 16U) /* clock phase */
| (uint32)((uint32)199U << 8U) /* baudrate prescale */
| (uint32)((uint32)8U << 0U); /* data word length */

/** – Data Format 2 */
spiREG2->FMT2 = (uint32)((uint32)0U << 24U) /* wdelay */
| (uint32)((uint32)0U << 23U) /* parity Polarity */
| (uint32)((uint32)0U << 22U) /* parity enable */
| (uint32)((uint32)0U << 21U) /* wait on enable */
| (uint32)((uint32)0U << 20U) /* shift direction */
| (uint32)((uint32)0U << 17U) /* clock polarity */
| (uint32)((uint32)0U << 16U) /* clock phase */
| (uint32)((uint32)79U << 8U) /* baudrate prescale */
| (uint32)((uint32)16U << 0U); /* data word length */

/** – Data Format 3 */
spiREG2->FMT3 = (uint32)((uint32)0U << 24U) /* wdelay */
| (uint32)((uint32)0U << 23U) /* parity Polarity */
| (uint32)((uint32)0U << 22U) /* parity enable */
| (uint32)((uint32)0U << 21U) /* wait on enable */
| (uint32)((uint32)0U << 20U) /* shift direction */
| (uint32)((uint32)0U << 17U) /* clock polarity */
| (uint32)((uint32)0U << 16U) /* clock phase */
| (uint32)((uint32)79U << 8U) /* baudrate prescale */
| (uint32)((uint32)16U << 0U); /* data word length */

/** – set interrupt levels */
spiREG2->LVL = (uint32)((uint32)0U << 9U) /* TXINT */
| (uint32)((uint32)0U << 8U) /* RXINT */
| (uint32)((uint32)0U << 6U) /* OVRNINT */
| (uint32)((uint32)0U << 4U) /* BITERR */
| (uint32)((uint32)0U << 3U) /* DESYNC */
| (uint32)((uint32)0U << 2U) /* PARERR */
| (uint32)((uint32)0U << 1U) /* TIMEOUT */
| (uint32)((uint32)0U << 0U); /* DLENERR */

/** – clear any pending interrupts */
spiREG2->FLG |= 0xFFFFU;

/** – enable interrupts */
spiREG2->INT0 = (spiREG2->INT0 & 0xFFFF0000U)
| (uint32)((uint32)0U << 9U) /* TXINT */
| (uint32)((uint32)1U << 8U) /* RXINT */
| (uint32)((uint32)0U << 6U) /* OVRNINT */
| (uint32)((uint32)0U << 4U) /* BITERR */
| (uint32)((uint32)0U << 3U) /* DESYNC */
| (uint32)((uint32)0U << 2U) /* PARERR */
| (uint32)((uint32)0U << 1U) /* TIMEOUT */
| (uint32)((uint32)0U << 0U); /* DLENERR */

/** @b initialize @b SPI2 @b Port */

/** – SPI2 Port output values */
spiREG2->PC3 = (uint32)((uint32)1U << 0U) /* SCS[0] */
| (uint32)((uint32)1U << 1U) /* SCS[1] */
| (uint32)((uint32)0U << 8U) /* ENA */
| (uint32)((uint32)0U << 9U) /* CLK */
| (uint32)((uint32)1U << 10U) /* SIMO */
| (uint32)((uint32)0U << 11U); /* SOMI */

/** – SPI2 Port direction */
spiREG2->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */
| (uint32)((uint32)1U << 1U) /* SCS[1] */
| (uint32)((uint32)0U << 8U) /* ENA */
| (uint32)((uint32)1U << 9U) /* CLK */
| (uint32)((uint32)1U << 10U) /* SIMO */
| (uint32)((uint32)0U << 11U); /* SOMI */

/** – SPI2 Port open drain enable */
spiREG2->PC6 = (uint32)((uint32)0U << 0U) /* SCS[0] */
| (uint32)((uint32)0U << 1U) /* SCS[1] */
| (uint32)((uint32)0U << 8U) /* ENA */
| (uint32)((uint32)0U << 9U) /* CLK */
| (uint32)((uint32)0U << 10U) /* SIMO */
| (uint32)((uint32)0U << 11U); /* SOMI */

/** – SPI2 Port pullup / pulldown selection */
spiREG2->PC8 = (uint32)((uint32)1U << 0U) /* SCS[0] */
| (uint32)((uint32)1U << 1U) /* SCS[1] */
| (uint32)((uint32)1U << 8U) /* ENA */
| (uint32)((uint32)1U << 9U) /* CLK */
| (uint32)((uint32)1U << 10U) /* SIMO */
| (uint32)((uint32)1U << 11U); /* SOMI */

/** – SPI2 Port pullup / pulldown enable*/
spiREG2->PC7 = (uint32)((uint32)0U << 0U) /* SCS[0] */
| (uint32)((uint32)0U << 1U) /* SCS[1] */
| (uint32)((uint32)0U << 8U) /* ENA */
| (uint32)((uint32)0U << 9U) /* CLK */
| (uint32)((uint32)0U << 10U) /* SIMO */
| (uint32)((uint32)0U << 11U); /* SOMI */

/* SPI2 set all pins to functional */
spiREG2->PC0 = (uint32)((uint32)0U << 0U) /* SCS[0] */
| (uint32)((uint32)1U << 1U) /* SCS[1] */
| (uint32)((uint32)0U << 8U) /* ENA */
| (uint32)((uint32)1U << 9U) /* CLK */
| (uint32)((uint32)1U << 10U) /* SIMO */
| (uint32)((uint32)1U << 11U); /* SOMI */

/** – Initialize TX and RX data buffer Status */
g_spiPacket_t[1U].tx_data_status = SPI_READY;
g_spiPacket_t[1U].rx_data_status = SPI_READY;

/** – Finally start SPI2 */
spiREG2->GCR1 = (spiREG2->GCR1 & 0xFEFFFFFFU) | 0x01000000U;

/* USER CODE BEGIN (3) */
/* USER CODE END */
}

gaoyang9992006:

C:\ti\Hercules\HALCoGen\v04.06.01\examples\TMS570LS31x_21x

参考这里面提供的SPI的例程。

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LS3137 SPI管脚上拉不起作用问题
分享到: 更多 (0)