/*************************************************************************************************** * @fn lcd_str_inv_disp * * @brief 反白显示段连续字符 * @param x,y -- 液晶坐标 * pCharStr -- 要显示的字符串 * @return 0 -- success * -1 - failure ***************************************************************************************************/ int lcd_str_inv_disp(unsigned char x,unsigned char y,unsigned char *pCharStr) { do { IF_PTR_IS_NULL_RET_NULLPTR_ERR(pCharStr); lcd_char_inv_disp(x,y,*pCharStr); x+=8; if(x>=(LCD_W-1)) // 写满自动跳转下一行 { x = 0; y += 16; } pCharStr++; }while(*pCharStr); return 0; }
/*************************************************************************************************** * @fn uarts_sport_send * * @brief s-port串口发送 * @param str -- 发送数据 * len -- 数据长度 * @return 0 -- success * -1 - failure * 1 -- busy ***************************************************************************************************/ int uarts_sport_send(uint8_t *Str, uint8_t len) { IF_PTR_IS_NULL_RET_NULLPTR_ERR(Str); if(len > S_PORT_TX_BUFF_LEN) return -1; if(sPortWriteBusyFlag) return 1; sPortWriteBusyFlag = 1; memcpy(Sport_TxBuffer, Str, len); DMA_SetCurrDataCounter(USART_S_PORT_Tx_DMA_STREAM,len); //采用DMA方式发送 USART_DMACmd(USART_S_PORT,USART_DMAReq_Tx,ENABLE); DMA_Cmd(USART_S_PORT_Tx_DMA_STREAM,ENABLE); return 0; }
/*************************************************************************************************** * @fn uarts_dbg_send * * @brief 调试串口发送 * @param str -- 发送数据 * len -- 数据长度 * @return 0 -- success * -1 -- failure * 1 -- busy ***************************************************************************************************/ int uarts_dbg_send(uint8_t *Str, uint16_t len) { IF_PTR_IS_NULL_RET_NULLPTR_ERR(Str); if(len > DBG_TX_BUF_LEN) return -1; if(dbgWriteBusyFlag) return 1; dbgWriteBusyFlag = 1; memcpy(dbg_TxBuffer, Str, len); DMA_SetCurrDataCounter(USARTdbg_Tx_DMA_STREAM,len); //采用DMA方式发送 USART_DMACmd(USARTdbg,USART_DMAReq_Tx,ENABLE); DMA_Cmd(USARTdbg_Tx_DMA_STREAM,ENABLE); return 0; }
/*************************************************************************************************** * @fn lcd_data_burst_write * * @brief LCD数据批量写入 * @param buf -- 要写入的数据的缓存 * len -- 写入数据的长度 * @return 1 -- busy * -1 - failure * 0 -- success ***************************************************************************************************/ int lcd_data_burst_write(uint8_t *buf, uint16_t len) { IF_PTR_IS_NULL_RET_NULLPTR_ERR(buf); if(len > LCD_TX_BUFF_SIZE) { printf("lcd write lenth is too large,return @ %s, %s, %d\r\n", __FILE__, __func__, __LINE__); return -1; } if(g_LcdWriteBusyFlag) { printf("lcd is busy, return @ %s, %s, %d\r\n", __FILE__, __func__, __LINE__); return 1; } g_LcdWriteBusyFlag = 1; lcd_cursor_addr_set(0,0); LCD_A0_HIGH(); LCD_NCS_LOW(); //启动DMA DMA_Cmd(LCD_DMA_STREAM, DISABLE); DMA_ClearITPendingBit(LCD_DMA_STREAM, LCD_DMA_TC_FLAG); memcpy(g_lcdTxBuff, buf, len); DMA_SetCurrDataCounter(LCD_DMA_STREAM, len); SPI_I2S_DMACmd(LCD_SPI_MASTER,SPI_I2S_DMAReq_Tx,ENABLE); DMA_ITConfig(LCD_DMA_STREAM, DMA_IT_TC, ENABLE); DMA_Cmd(LCD_DMA_STREAM,ENABLE); printf("begin lcd dma write @ %s, %s, %d\r\n", __FILE__, __func__, __LINE__); printf(" SPI3->CR1:%#x, SPI3->CR2:%#x, SPI3->SR:%#x, DMA1_Stream7->CR:%#x, DMA1->HIFCR:%#x\r\n", SPI3->CR1, SPI3->CR2, SPI3->SR, DMA1_Stream7->CR, DMA1->HIFCR); return 0; }