Пример #1
0
// Fonction d'initialisation
void init(void)
{
	unsigned char i;
	for(i=0;i<=5;i++) Data_Received[i] = 0x00;

	cli();							// Désactiver toutes les interruptions

	DDRD = 0b10000110;				// config pour BP1 2 3 et 4 (BP = bouton poussoir)
	sbiBF (PORTD, PORTD3);			// BP0
	sbiBF (PORTD, PORTD4);			// BP1
	sbiBF (PORTD, PORTD5);			// BP2
	sbiBF (PORTD, PORTD6);			// BP3
	sDDR(DDRD,1);					// mettre port TX en sortie
	sbiBF(PORTD,0); 				// mettre pull-up sur RX
	sbiBF(PORTC,0); 				// mettre pull-up sur RX
	sDDR(DDRC,1); 					// mettre port en sortie
	DDRB = 0b00111111;  			// PORTB.6et7 en entrée (quartz)
	sbiBF (PORTB, PINB0);				// communication usart à 600baud non modulé

	USART0_Init_9600();				// initialise le port série 
	Init_Buffers_USART ();			// initialise les buffers de la communication série

	init_pcint();					// initialise les interruptions externes

	TIMER0_INIT();					// initialise le timer 0
	TIMER1_INIT ();					// initialiser le timer 1
	TIMER2_INIT ();					// initialiser le timer 2

	sei();
}
Пример #2
0
/*****************************************************************************
* 函 数 名  : hsUartInit
*
* 功能描述  : HS UART的基本参数的初始化
*
* 输入参数  : 无
*
* 输出参数  : 无
* 返 回 值  : HSUART_STATUS_OK 设置成功
*                HSUART_STATUS_BAUTRATE_ERR 设置波特率超时失败
*
* 修改记录  :2010年12月16日   鲁婷  创建
*****************************************************************************/
HSUART_STATUS hsUartInit(RECV_STR *pstQue)
{
    UINT32 u32Divisor = 0;
    UINT32 u32DivisorLow = 0;
    UINT32 u32DivisorHigh = 0;
    UINT32 u32Discard = 0;
    UINT32 u32Fcr = 0;
    UINT32 u32Times = 0;

    if(NULL == pstQue)
    {
        return HSUART_STATUS_PARA_ERR;
    }

    /* 管脚复用为高速串口 */
    HSUART_IOS_SYS_CONFIG();

    /* 计算分频比 */
    u32Divisor = HSUART_CLOCK_FREQ / (16 * HSUART_BAUT_RATE_DEFAULT);
    u32DivisorHigh = (u32Divisor&0xFF00) >> 8;
    u32DivisorLow = u32Divisor&0xFF;

    /*写FCR,把接收FIFO 和发送FIFO 全部复位清空,设置FIFO使能,非DMA Model */
    u32Fcr = UART_DEF_RT_ONEFOUR|UART_DEF_TET_NULL|UART_DEF_NO_DMA_MODE|UART_RESET_TX_FIFO|UART_RESET_RCV_FIFO|UART_DEF_FIFOE_ENABLE;

    OUTREG32(HSUART_BASE_ADDR + UART_FCR, u32Fcr);

    /*去使能所有中断*/
    OUTREG32(HSUART_BASE_ADDR + UART_IER, 0x00);

    /*clear line status interrupt*/
    u32Discard = INREG32(HSUART_BASE_ADDR + UART_LSR);
    /*clear rcv interrupt*/
    u32Discard = INREG32(HSUART_BASE_ADDR + UART_RBR);
    /*clear send empty interrupt*/
    u32Discard = INREG32(HSUART_BASE_ADDR + UART_IIR);
    /*clear line busy interrupt*/
    u32Discard = INREG32(HSUART_BASE_ADDR + UART_USR);

    /* 读取UART 状态寄存器,看UART是否处于idle状态*/
    u32Discard = INREG32(HSUART_BASE_ADDR + UART_USR);
    while((u32Discard & 0x01)&&(u32Times<1000))/*uart is busy*/
    {
    	u32Discard = INREG32(HSUART_BASE_ADDR + UART_USR);
        u32Times++;
    }
    if(1000 == u32Times)
    {
        return HSUART_STATUS_BAUTRATE_ERR;
    }

    /* USR bit[0]=0 即UART 处在idle 态时,才能对LCR bit[7]该位进行写操作*/
    OUTREG32(HSUART_BASE_ADDR + UART_LCR, UART_DEF_LCR_DIVENABLE);

    /* 配置DLH 和DLL 寄存器,设置分频比*/
    OUTREG32(HSUART_BASE_ADDR +  UART_DLL, u32DivisorLow);
    OUTREG32(HSUART_BASE_ADDR +  UART_DLH, u32DivisorHigh);

    /* 配置外围发送和接收数据的数目为8bit,1停止位,无校验位,disable DLL&DLH */
    OUTREG32(HSUART_BASE_ADDR +  UART_LCR, UART_DEF_PARITY_NONE|UART_DEF_LCR_STP1|UART_DEF_LCR_CS8);

    /* 配置MCR ,rts,打开流控*/
    OUTREG32(HSUART_BASE_ADDR +  UART_MCR, 0x22);

    /* 配置发送FIFO */
    OUTREG32(HSUART_BASE_ADDR +  UART_TXDEPTH, 10);

    /* 使用接收中断 */
    OUTREG32(HSUART_BASE_ADDR +  UART_IER, 0x11);

    pstQue->ulRead = 0;
    pstQue->ulWrite = 0;
    pstQue->ulTotalNum = 0;

    /* 初始化超时定时器 */
    TIMER0_INIT();

    return HSUART_STATUS_OK;
}