mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-22 17:12:55 +08:00
89 lines
1.9 KiB
C
89 lines
1.9 KiB
C
#include "st7789_serial.h"
|
|
|
|
void S_Back_On(void)
|
|
{
|
|
HAL_GPIO_WritePin(S_LEDA1_PORT, S_LEDA1_PIN, GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(S_LEDA2_PORT, S_LEDA2_PIN, GPIO_PIN_SET);
|
|
}
|
|
|
|
void S_Back_Off(void)
|
|
{
|
|
HAL_GPIO_WritePin(S_LEDA1_PORT, S_LEDA1_PIN, GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(S_LEDA2_PORT, S_LEDA2_PIN, GPIO_PIN_RESET);
|
|
}
|
|
|
|
static void S_WaitTe(void)
|
|
{
|
|
while ((S_FMARK_PORT->DATA & S_FMARK_PIN) == 0);
|
|
}
|
|
|
|
void S_WriteReg(uint8_t reg)
|
|
{
|
|
S_CD_LOW;
|
|
S_CS_LOW;
|
|
HAL_SPI_Transmit(&hspi, ®, 1, 100);
|
|
S_CS_HIGH;
|
|
S_CD_HIGH;
|
|
}
|
|
|
|
void S_WriteData8(uint8_t data)
|
|
{
|
|
S_CS_LOW;
|
|
HAL_SPI_Transmit(&hspi, &data, 1, 100);
|
|
S_CS_HIGH;
|
|
}
|
|
|
|
void S_WriteData16(uint16_t data)
|
|
{
|
|
uint8_t temp[2];
|
|
|
|
temp[0] = data >> 8;
|
|
temp[1] = data;
|
|
S_CS_LOW;
|
|
HAL_SPI_Transmit(&hspi, temp, 2, 100);
|
|
S_CS_HIGH;
|
|
}
|
|
|
|
#define DMA_Channel0 ((DMA_Channel_TypeDef *)DMA_Channel0_BASE)
|
|
void HAL_SPI_Transmit_dma(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size)
|
|
{
|
|
uint32_t block_cnt = 0, tx_block_cnt = 0, tx_size = 0;
|
|
|
|
__HAL_RCC_DMA_CLK_ENABLE();
|
|
block_cnt = Size / BLOCK_SIZE;
|
|
while (tx_block_cnt <= block_cnt)
|
|
{
|
|
if (tx_block_cnt < block_cnt)
|
|
{
|
|
tx_size = BLOCK_SIZE;
|
|
}
|
|
else
|
|
{
|
|
tx_size = Size % BLOCK_SIZE;
|
|
}
|
|
__HAL_SPI_CLEAR_FIFO(hspi);
|
|
|
|
DMA_Channel0->MODE = 0x15;
|
|
DMA_Channel0->SA = (uint32_t)(pData + (BLOCK_SIZE * tx_block_cnt));
|
|
DMA_Channel0->DA = (uint32_t)(&(hspi->Instance->TXDATA));
|
|
DMA_Channel0->CR2 = ((tx_size << 8) | 0x42);
|
|
hspi->Instance->MODE_CFG = 0x01;
|
|
|
|
__HAL_SPI_SET_CLK_NUM(hspi, tx_size * 8);
|
|
DMA_Channel0->CR1 |= 0x1;
|
|
__HAL_SPI_SET_START(hspi);
|
|
while (DMA_Channel0->CR1 & 0x01);
|
|
while (hspi->Instance->STATUS & (1 << 12));
|
|
__HAL_SPI_CELAR_FLAG(hspi, 0xFF);
|
|
*((uint32_t *)(0x40000804)) |= 0x03;
|
|
tx_block_cnt++;
|
|
}
|
|
}
|
|
|
|
void S_WriteData(uint8_t *data, uint32_t len)
|
|
{
|
|
S_CS_LOW;
|
|
HAL_SPI_Transmit(&hspi, data, len, 1000);
|
|
// HAL_SPI_Transmit_dma(&hspi, data, len);
|
|
S_CS_HIGH;
|
|
} |