예제 #1
0
/***************************************************************************************************
 * @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;
}
예제 #2
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;
}
예제 #3
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;
}
예제 #4
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;
}