Exemple #1
0
void INTTB0_IRQHandler(void)
{
    static uint32_t cnt = 0U;

    if (cnt++ >= 1000U) {
        UART_Print(UART0, "Once timer interrupt has happend\n\r");
        cnt = 0U;
    }
}
Exemple #2
0
void FC_Basic(void)
{
    FunctionalState tmp_value_sec0, tmp_value_sec1, tmp_value_block;
	
	UART_Configuration(UART);
	UART_Print(UART, "This is an example for FC\n\r");

	/* Set security function "ENABLE" */
	FC_SetSecurityBit(ENABLE);
	UART_Print(UART, "Enable the Security Function\n\r");
	/* Get security register value */
	tmp_value_sec0 = FC_GetSecurityBit();
	if (tmp_value_sec0 != ENABLE) {
		UART_Print(UART, "Security register value is disable\n\r");
	}else{
		UART_Print(UART, "Security register value is enable\n\r");
	}

	/* Set security function "DISABLE" */
	FC_SetSecurityBit(DISABLE);
	UART_Print(UART, "Disable the Security Function\n\r");
	/* Get security register value */
	tmp_value_sec1 = FC_GetSecurityBit();
	if (tmp_value_sec1 != DISABLE) {
		UART_Print(UART, "Security register value is enable\n\r");
	}else{
		UART_Print(UART, "Security register value is diable\n\r");
	}

	/* Get Block 0 Protection status */
	tmp_value_block = FC_GetBlockProtectState(FC_BLOCK_0);
	UART_Print(UART, "Getting Block 0 Protection status\n\r");
	if (tmp_value_block != DISABLE) {
		UART_Print(UART, "The status is enable\n\r");
	}else{
		UART_Print(UART, "The status is diable\n\r");
	}
	
	/* Wait for Ready */
	while (FC_GetBusyState() != DONE) {
		/* Do nothing */
	};

}
Exemple #3
0
void Command_Dir(){
	File dir = SD.open(cwd);
	dir.rewindDirectory(); // this line cures headaches

	char uart_str[32];
	while(true){
		File entry = dir.openNextFile();
		if(!entry) break;
		UART_Print(entry.name());
		if(!entry.isDirectory()){
			UART_Print("\t\t");
			sprintf(uart_str, "%lu", entry.size());
			UART_Print(uart_str);
		}
		UART_Print("\n\r");
		entry.close();
	}
	dir.close();
}
Exemple #4
0
void Command_Flash(){
	char path[12];
	uint8 pathlen = Command_GetArg(0, path, sizeof(path));
	if(pathlen>12) pathlen = 12; // only 8.3 filenames are supported
	if(pathlen == 0){
		UART_Print("Usage: flash <firmware file>\n\r");
	}else{
		char pathtmp[sizeof(cwd)];
		if(cwdlen+pathlen>sizeof(pathtmp)){
			UART_Print("Resultant path is too long!\n\r");
			return;
		}
		for(uint8 i=0;i<cwdlen;i++){
			pathtmp[i] = cwd[i];
		}
		for(uint8 i=0;i<cwdlen;i++){
			pathtmp[i] = cwd[i];
		}
		if(cwdlen>1){
			pathtmp[cwdlen] = '/';
			cwdlen++;
		}
		for(uint8 i=0;i<pathlen;i++){
			pathtmp[cwdlen+i] = path[i];
		}
		if(cwdlen>1){
			cwdlen--;
		}
		pathtmp[cwdlen+pathlen] = 0; // ensure string is null-terminated
		if(SD.exists(pathtmp)){
			BL_Flash(pathtmp);
		}else{
			UART_Print("File not found!\n\r");
		}
	}
}
Exemple #5
0
void uart_print(void)
{
    TSB_WD_MOD_WDTE = 0U;
    TSB_WD->CR = 0x000000B1;
    SIO_Configuration(UART0);
    myUART.BaudRate = 115200U;
    myUART.DataBits = UART_DATA_BITS_8;
    myUART.StopBits = UART_STOP_BITS_1;
    myUART.Parity = UART_NO_PARITY;
    myUART.Mode = UART_ENABLE_TX;
    myUART.FlowCtrl = UART_NONE_FLOW_CTRL;

    UART_Enable(UART0);
    UART_Init(UART0, &myUART);
		
    UART_Print("Hello World!\n");
}
Exemple #6
0
void TB0_print(void)
{
    TMRB_InitTypeDef myTMRB;
	  WDT_Disable();
    UART_Configuration(UART0);

	  UART_Print(UART0, "This is a TIMER example!\n\r\n\r");
    myTMRB.Mode = TMRB_INTERVAL_TIMER;
    myTMRB.ClkDiv = TMRB_CLK_DIV_8;
    myTMRB.Cycle = TMRB_1ms;    /* Specific value depends on system clock */
    myTMRB.UpCntCtrl = TMRB_AUTO_CLEAR;
    myTMRB.Duty = TMRB_1ms / 2U;        /* Specific value depends on system clock */

    TMRB_Enable(TSB_TB0);
    TMRB_Init(TSB_TB0, &myTMRB);
    TMRB_SetRunState(TSB_TB0, TMRB_RUN);
    NVIC_EnableIRQ(INTTB0_IRQn);
    while (1) {
        /* Do nothing */
    }
}
uint8 Settings_LoadFromCard() {
	if (SD_IsCardReady()) {
		if (SD.exists(CONFIG_FILENAME)) {
			UART_Print("Loading config.txt from card...\n\r");
			configFile = SD.open("config.txt", FILE_READ);
			uint8 buf[32];
			uint8 nread = configFile.read(buf, sizeof(buf));
			while (nread > 0) {
				Settings_ProcessBuffer(buf, nread);
				nread = configFile.read(buf, sizeof(buf));
			}
			buf[0] = '\n';
			Settings_ProcessBuffer(buf, 1);
			configFile.close();
			UART_Flush();
			DelayMs(50); // Allow UART to clear
			Settings_Save();
			return 1;
		}
	}
	return 0;
}
void process_char(uint8 c){
	static char uart_str[50];
    if(c=='\n' || c == '\r'){
        if(keylen>0){
        	uint8 ret = process_keyvalue();
        	if(ret == 0){
        		UART_Print("Read ");
        		for(uint8 i=0;i<keylen;i++){
        			UART_Print(key[i]);
        		}
        		UART_Print(" ");
        		for(uint8 i=0;i<valuelen;i++){
        			UART_Print(value[i]);
        		}
        		UART_Print("\n\r");
        	}else if(ret==1){
        		UART_Print("Unrecognised key: \"");
        		for(uint8 i=0;i<keylen;i++){
					UART_Print(key[i]);
				}
        		UART_Print("\"\n\r");
        	}else if(ret==2){
        		UART_Print("Expected value after key: \"");
        		for(uint8 i=0;i<keylen;i++){
					UART_Print(key[i]);
				}
				UART_Print("\"\n\r");
        	}
        }
        keylen = valuelen = 0;
        state = STATE_WAITING_KEY;
    }else{
        if(state == STATE_WAITING_KEY){
            if(c=='#'){
                state = STATE_IN_COMMENT;
            }else if(is_alpha(c)){
                key[keylen++] = c;
                state = STATE_IN_KEY;
            }
        }else if(state == STATE_IN_KEY){
            if(is_alpha(c)){
                if(keylen<sizeof(key)) key[keylen++] = c;
            }else{
                state = STATE_WAITING_VALUE;
                valuelen = 0;
            }
        }else if(state == STATE_WAITING_VALUE){
            if(is_alpha(c)){
                value[valuelen++] = c;
                state = STATE_IN_VALUE;
            }
        }else if(state == STATE_IN_VALUE){
            if(valuelen<sizeof(value)) value[valuelen++] = c;
        }
    }
}
Exemple #9
0
void RMC_DEMO(void)
{
    TSB_RMC_TypeDef *RMCx;
    RMC_InitTypeDef myRMC;
	
    RMCx = TSB_RMC0;
    RMC_Command = 0U;
    SystemInit();
    RMC_Configuration(RMCx);    /*RMC IO initial */

    __disable_irq();
    TSB_CG->IMCGE = 0x00300000U;
    TSB_CG->ICRCG = 0x00000012U;
    TSB_CG->IMCGE = 0x00310000U;

#ifdef TOSHIBA_FORMAT_RMC
    /*RMC register set for TOSHIBA format */
    myRMC.LeaderPara.MaxCycle = RMC_MAX_CYCLE;
    myRMC.LeaderPara.MinCycle = RMC_MIN_CYCLE;
    myRMC.LeaderPara.MaxLowWidth = RMC_MAX_LOW_WIDTH;
    myRMC.LeaderPara.MinLowWidth = RMC_MIN_LOW_WIDTH;
    myRMC.LeaderPara.LeaderDetectionState = ENABLE;
    myRMC.LeaderPara.LeaderINTState = DISABLE;
    myRMC.FallingEdgeINTState = DISABLE;
    myRMC.SignalRxMethod = RMC_RX_IN_CYCLE_METHOD;
    myRMC.LowWidth = RMC_TRG_LOW_WIDTH;
    myRMC.MaxDataBitCycle = RMC_TRG_MAX_DATA_BIT_CYCLE;
    myRMC.LargerThreshold = RMC_LARGER_THRESHOLD;
    myRMC.SmallerThreshold = RMC_SMALLER_THRESHOLD;
    myRMC.InputSignalReversedState = DISABLE;
    myRMC.NoiseCancellationTime = RMC_NOISE_CANCELLATION_TIME;
#endif

#ifdef RC5_FORMAT_RMC
    /*RMC register set for RC5 format */
    myRMC.LeaderPara.MaxCycle = RMC_MAX_CYCLE;
    myRMC.LeaderPara.MinCycle = RMC_MIN_CYCLE;
    myRMC.LeaderPara.MaxLowWidth = RMC_MAX_LOW_WIDTH;
    myRMC.LeaderPara.MinLowWidth = RMC_MIN_LOW_WIDTH;
    myRMC.LeaderPara.LeaderDetectionState = DISABLE;
    myRMC.LeaderPara.LeaderINTState = DISABLE;
    myRMC.FallingEdgeINTState = DISABLE;
    myRMC.SignalRxMethod = RMC_RX_IN_PHASE_METHOD;
    myRMC.LowWidth = RMC_TRG_LOW_WIDTH;
    myRMC.MaxDataBitCycle = RMC_TRG_MAX_DATA_BIT_CYCLE;
    myRMC.LargerThreshold = RMC_LARGER_THRESHOLD;
    myRMC.SmallerThreshold = RMC_SMALLER_THRESHOLD;
    myRMC.InputSignalReversedState = ENABLE;
    myRMC.NoiseCancellationTime = RMC_NOISE_CANCELLATION_TIME;
#endif

    /* Enable and config the function for RMC channel */
    RMC_Enable(RMCx);
    RMC_Init(RMCx, &myRMC);
    /* RMC Reception enable */
    RMC_SetRxCtrl(RMCx, ENABLE);

    /* Enable the Receive interrupt for RMC channel */
    /* RMC0 should to enable INTRMCRX0_IRQn, RMC1 should to enable INTRMCRX1_IRQn. */
    NVIC_EnableIRQ(INTRMCRX0_IRQn);

    __enable_irq();

    do {
        if (fRMCRx) {
            sprintf(message, "RMC DATA: 0x%x\n", RMC_Command );
            UART_Print(UART, message);    /*printf RMC read data */
            fRMCRx = None;
        }
    } while (1);
}
Exemple #10
0
/* SSP_LoopBack function */
void SSP_LoopBack(void)
{
    SSP_InitTypeDef initSSP;
    SSP_FIFOState fifoState;
	
    uint16_t datTx = 0U;        /* must use 16bit type */
    uint32_t cntTx = 0U;
    uint32_t cntRx = 0U;

    uint16_t receive = 0U;
    uint16_t Rx_Buf[MAX_BUFSIZE] = { 0U };
    uint16_t Tx_Buf[MAX_BUFSIZE] = { 0U };

    SystemInit();

    /* enable the LED on board to display some info */
    UART_Configuration(UART);
    UART_Print(UART, "This is an example for SSP module!\n\r");

    /* configure the SSP module */
    initSSP.FrameFormat = SSP_FORMAT_SPI;

    /* default is to run at maximum bit rate */
    initSSP.PreScale = 2U;
    initSSP.ClkRate = 1U;
    /* define BITRATE_MIN to run at minimum bit rate */
    /*   BitRate = fSYS / (PreScale x (1 + ClkRate)) */
#ifdef BITRATE_MIN
    initSSP.PreScale = 254U;
    initSSP.ClkRate = 255U;
#endif
    initSSP.ClkPolarity = SSP_POLARITY_LOW;
    initSSP.ClkPhase = SSP_PHASE_FIRST_EDGE;
    initSSP.DataSize = 16U;
    initSSP.Mode = SSP_MASTER;
    SSP_Init(&initSSP);


    /* enable loop back mode for self test */
    SSP_SetLoopBackMode(ENABLE);

    /* enable and run SSP module */
    SSP_Enable();

    while (1) {
        
        datTx++;
        
        /* send data if Tx FIFO is available */
        fifoState = SSP_GetFIFOState(SSP_TX);
        if ((fifoState == SSP_FIFO_EMPTY) || (fifoState == SSP_FIFO_NORMAL)) {
            SSP_SetTxData(datTx);
            if (cntTx < MAX_BUFSIZE) {
                Tx_Buf[cntTx] = datTx;
                cntTx++;
            } else {
                /* do nothing */
            }
        } else {
            /* do nothing */
        }


        /* check if there is data arrived */
        fifoState = SSP_GetFIFOState(SSP_RX);
        if ((fifoState == SSP_FIFO_FULL) || (fifoState == SSP_FIFO_NORMAL)) {
            receive = SSP_GetRxData();
            if (cntRx < MAX_BUFSIZE) {
                Rx_Buf[cntRx] = receive;
                cntRx++;
            } else {
                /* Place a break point here to check if receive data is right.                */
                /* Success Criteria:                                                          */
                /*               Every data transmited from Tx_Buf is received in Rx_Buf.     */
                /* When the line "#define BITRATE_MIN" is commented, the SSP is run in maxium */
                /*  bit rate, so we can find there is enough time to transmit date from 1 to  */
                /*  MAX_BUFSIZE one by one. but if we uncomment that line, SSP is run in      */
                /*  minimum bit rate, we will find that receive data can't catch "datTx++",   */
                /*  in this so slow bit rate, when the Tx FIFO is available, the cntTx has    */
                /*  been increased so much.                                                   */
                __NOP();
            }

        } else {
            /* do nothing */
        }
        sprintf(message, "Received data is %d\n\r" + (uint8_t)(receive / 8000));
        UART_Print(UART, message);
    }
}
Exemple #11
0
void task1(void * pdata )
{

    INT8U  ch;
    INT8U  err;
    static INT8U print_out_buf[60] = {0};
    static INT8U scan_buf[90]= {0};
    static UART_AT_STATE_TypeDef g_uart_at_state = UART_AT_STATE_AT;
    //U10开机信号
    static bool flag_start_u10_sig = true;
    flag_start_u10_sig = true;

    GPIO_WriteHigh(GPIOD,GPIO_PIN_2);//高
    OSTimeDlyHMSM(0,0,4,0 );
    GPIO_WriteLow(GPIOD,GPIO_PIN_2);


    //cszdata=cszdata;
    //UART_Print("AT\r\n");

    //UART_Print("AT12345abcdefghijklmnopqrest\r\n");

    //g_uart_at_state = UART_AT_STATE_AT;
    g_uart_at_state = UART_AT_STATE_INIT2_REP;
    //注意!在最高优先级任务循环前打开定时器中断,以满足在OSStart()前不产生中断的要求。
    //在系统调用OSInit()时会自动创建一个优先级最低的系统任务,创建过程中会调用OS_EXIT_CRITICAL()打开EA。
    //若在InitTimer0()里打开T0中断,则违反了在OSStart()前不产生中断的要求。
    //切记将ET0=1;放在最高优先级任务里,OSStart()将调用OSStartHighRdy()第一个运行最高优先级任务,这样ET0=1总能被第一个执行。
    //ET0=1;

    for (;;)
    {
#if 0
        if(flag_start_u10_sig)//只执行一次 //U10开机信号
        {
            GPIO_WriteHigh(GPIOD,GPIO_PIN_2);//高
            flag_start_u10_sig = false;
            OSTimeDlyHMSM(0,0,4,0 );
            //  GPIO_WriteLow(GPIOD,GPIO_PIN_2);
            //  Delay(0x3ffff);
            GPIO_WriteLow(GPIOD,GPIO_PIN_2);
        }
#endif
#if ONE_FRAME_EN
        //INT8U scan_buf[20]={0};

        //printf("task1 \r\n");
        //UART_Print("AT\r\n");
        //OSTimeDlyHMSM(0,0,0,20);
        // CommPutChar('9', OS_TICKS_PER_SEC);
        //      CommPutChar('\r', OS_TICKS_PER_SEC);
        //      CommPutChar('\n', OS_TICKS_PER_SEC);
        UART_Scan(scan_buf);
#if DEBUG_EN
        if(scan_buf[0] != '\0')
        {
            sprintf(print_out_buf,"YOU SEND: %s\r\n",scan_buf);
            UART_Print(print_out_buf);
            memset(scan_buf,0,60);
        }
#endif

#if 0
        if(strstr((char const *)scan_buf, "abcdef"))
        {
            UART_Print("YOU SEND: abcdef\r\n");

        }
#endif
#if 1

        switch(g_uart_at_state)
        {
        case UART_AT_STATE_INIT2_REP:
            if(strstr((char const *)scan_buf, "+INIT: 2"))
            {
                UART_Print("AT\r\n");
                g_uart_at_state = UART_AT_STATE_AT;
            }
            break;
        case UART_AT_STATE_AT:
            if(strstr((char const *)scan_buf, "OK"))
            {
                UART_Print("ATI\r\n");
                g_uart_at_state = UART_AT_STATE_ATI;
            }

            break;
        case UART_AT_STATE_ATI:
            if(strstr((char const *)scan_buf, "OK"))
            {
                UART_Print("AT+CREG?\r\n");
                g_uart_at_state = UART_AT_STATE_OK;
            }

            break;
        case UART_AT_STATE_OK:
            if(strstr((char const *)scan_buf, "+CREG:"))
            {
                UART_Print("AT+qflst=\"*\"\r\n");
                //g_uart_at_state = UART_AT_STATE_AT;
                g_uart_at_state = UART_AT_STATE_INIT2_REP;
            }
            //g_uart_at_state = UART_AT_STATE_AT;

            break;
        default:
            break;

        }
#endif

        //OSTimeDlyHMSM(0,0,0,20);
#else
        ch  = CommGetChar(0, &err);
        if(ch!=NUL)
        {
            CommPutChar(ch, 0);

        }
        OSTimeDly(2);
#endif
    }

#if 0
    while(1)
    {
#if 0
        printf("task1 ");

        if(g_flag__rx_frame_complete)//串口收到消息,字符串
        {
            g_flag__rx_frame_complete=false;
            //pBuf=UART2_GetData(&len);
            Uart_GetStr( (char *)g_uart_rx_content);
            if(strstr((char const *)g_uart_rx_content,"halt") )
            {
                printf("you send the message is :halt \r\n");
                asm("halt\n");
            }
        }

#endif

        OSTimeDlyHMSM(0,0,0,TIME_DELAY );

    }
#endif
}
Exemple #12
0
void CEC_STANDBY(void)
{
    uint32_t Index = 0U;
    uint32_t temp = 0U;
    SystemInit();
    /*initial cec port */
    TSB_PI->CR = 0x01U;
    TSB_PI->FR1 = 0x01U;
    TSB_PI->IE = 0x01U;
    /*initial cec frame data buffer */
    CEC_RxFrame.Initiator = CEC_UNKNOWN;
    CEC_RxFrame.Destination = CEC_UNKNOWN;
    CEC_RxFrame.Opcode = 0xFFU;
    CEC_RxFrame.current_num = 0x0U;
    CEC_RxFrame.Max_num = 0x0U;
    CEC_RxFrame.current_state = DATA_INIT;
    for (Index = 0U; Index < 17U; Index++) {
        CEC_RxFrame.CEC_Data[Index] = 0xFFU;
    }
    CEC_RxFrameTmp = CEC_RxFrame;
    CEC_TxFrame = CEC_RxFrame;
    /*initial cec register */
    CEC_Enable();
    CEC_SWReset();
    while (CEC_GetRxState() == ENABLE);
    while (CEC_GetTxState() == BUSY);
    CEC_DefaultConfig();

    /*initial cec interupt */
    __disable_irq();
    TSB_CG->IMCGE = 0x00003030U;
    TSB_CG->IMCGE = 0x00003131U;
    TSB_CG->ICRCG = 0x10U;
    NVIC_EnableIRQ(INTCECRX_IRQn);
    NVIC_EnableIRQ(INTCECTX_IRQn);
    __enable_irq();

    /*set logical address TV */
    CEC_SetLogicalAddr(CEC_TV);
    /*Enable CEC reception */
    CEC_SetRxCtrl(ENABLE);

    while (1) {
        /*Recieve new frame or not */
        if (CEC_RxFrameTmp.current_state == DATA_END) {
            CEC_RxFrame = CEC_RxFrameTmp;
            CEC_RxFrameTmp.current_num = 0U;
            CEC_RxFrameTmp.current_state = DATA_INIT;
            temp = CEC_RxFrame.current_num;

            if (temp > 0U) {
                UART_Print(UART, "CEC Message: ");
                for (Index = 0U; Index < temp; Index++) {
                    UART_Print(UART, "0x%2x " + CEC_RxFrame.CEC_Data[Index]);
                }
                UART_Print(UART, "\n");
            }

            for (Index = 0U; Index < 17U; Index++) {
                CEC_RxFrameTmp.CEC_Data[Index] = 0xFFU;
            }
            /*CEC message is "Active Source" */
            if (CEC_RxFrame.CEC_Data[1] == 0x82U) {
                CEC_Send_Frame(CEC_TV, CEC_BROADCAST, 0x36U, 0U, CEC_RxFrame.CEC_Data);
            }
        }
    }
}
Exemple #13
0
void uartPutuint8(uint8 val) {
    UART_Print(val);
}
Exemple #14
0
void uartPutArray(uint8 val[], uint32 len) {
    uint8 i = 0;
    for(i=0; i<len; i++) {
        UART_Print((char)val[i]);
    }
}
Exemple #15
0
/* The demo is for external 16-bit SRAM, separate bus mode */
void SRAM(void)
{
    uint8_t chip = 0xFFU;
    SMC_IFConfigTypeDef config = { 0U };
    uint8_t bus_w = 0xFFU;
    uint8_t bus_r = 0xFFU;
    SMC_CyclesTypeDef cycles_w = { 0U };
    SMC_CyclesTypeDef cycles_r = { 0U };
    SMC_OpModeTypeDef opmode_w = { 0U };
    SMC_OpModeTypeDef opmode_r = { 0U };
    SMC_DirectCMDTypeDef cmd = { 0U };
	uint8_t retval = 0U;

	UART_Configuration(UART);
	UART_Print(UART, "This is an example for SMC\n\r");
	UART_Print(UART, "Initializing the SRAM...\n\r");

    /* Initial process demo */

    /* Herein describe SRAM model number and basic infomation */
    /* CS0: 0x60000000 ~ 0x60FFFFFF(16MB) */
    /* CS1: 0x61000000 ~ 0x61FFFFFF(16MB) */
    /* CS2: 0x62000000 ~ 0x62FFFFFF(16MB) */
    /* CS3: 0x63000000 ~ 0x63FFFFFF(16MB) */
    chip = SMC_CS2;

    bus_w = SMC_BUS_MULTIPLEX;  /* Address bus and data bus are multiplexed */
    SMC_SetBusMode(bus_w);

    bus_r = SMC_GetBusMode();
    if (bus_w != bus_r) {
        retval |= 0x01U;
    }

    SMC_GetIFConfig(&config);
    if (config.MemoryType != SMC_MULTIPLEX_SRAM) {
        /* If multiplex bus mode, MemoryType is SMC_MULTIPLEX_SRAM */
        retval = 0x02U;
    }
    if (config.MemoryWidth != SMC_DATA_BUS_16BIT) {
        /* SMC_DATA_BUS_16BIT can not be read out if no external memory, */
        /* and default value of "0x02" will be read out. */
        retval |= 0x04U;
    }
    if ((config.MemoryChips) != SMC_MEMORY_CHIPS_4) {
        retval |= 0x08U;
    }

    /* Set cycles time according to AC timing of SRAM datasheet,base clock: SMCCLK(fsys*1/2) */

    /* Separate bus mode:tCEOE + SMCCLK*1clk <= tRC  */
    /* Multiplex bus mode:tCEOE + SMCCLK*2clk <= tRC */
    cycles_w.RC_Time = SMC_READ_CYCLE_TIME_5;
    /* Separate bus mode:tWP + SMCCLK*2clk <= tWC  */
    /* Multiplex bus mode:tWP + SMCCLK*3clk <= tWC */
    cycles_w.WC_Time = SMC_WRITE_CYCLE_TIME_5;
    cycles_w.CEOE_Time = SMC_CEOE_DELAY_CYCLE_TIME_1;
    cycles_w.WP_Time = SMC_WE_PULSE_CYCLE_TIME_1;

    /* PC_Time is only effective for separate bus mode */
    /* It's necessary to also set to pass parameter check in multiplex bus mode */
    cycles_w.PC_Time = SMC_PAGE_CYCLE_TIME_5;

    cycles_w.TR_Time = SMC_TURN_AROUND_CYCLE_TIME_1;
    SMC_SetCycles(&cycles_w);

    opmode_w.BusWidth = SMC_DATA_BUS_16BIT;
    opmode_w.ReadBurstLen = SMC_READ_BURST_4BEAT;
    opmode_w.ALE = ENABLE;      /* ALE must be enabled in multiplex bus mode */
    SMC_SetOpMode(&opmode_w);

    /* Make sure SMC_SetCycles and SMC_SetOpMode are performed before SMC_SendDirectCMD */
    cmd.CmdType = SMC_CMD_UPDATEREGS;
    cmd.ChipSelect = chip;
    SMC_SendDirectCMD(&cmd);

    /* Read cycles and opmode for verify */
    SMC_GetCycles(chip, &cycles_r);
    if (memcmp(&cycles_r, &cycles_w, sizeof(SMC_CyclesTypeDef)) != 0) {
        retval |= 0x10U;
    }

    SMC_GetOpMode(chip, &opmode_r);
    opmode_w.StartAddr = SMC_START_ADDR_CHIP0 | (uint8_t) chip; /* For compare with read out opmode */
    if (memcmp(&opmode_r, &opmode_w, sizeof(SMC_OpModeTypeDef)) != 0) {
        retval |= 0x20U;
    }

    /* check retval to see if SRAM initialization is sucessful or not */
    if (retval == 0U) {
		UART_Print(UART, "SRAM initialization is sucessful!\n\r");/* Sucessful */
    } else {
		UART_Print(UART, "SRAM initialization is failed!\n\r");/* Failed */
    }
}
Exemple #16
0
/* Send RTC Date value to hyperterminal */
void demo0(void)
{
    /* Get RTC Date value */
    Year = RTC_GetYear();
    Month = RTC_GetMonth();
    Date = RTC_GetDate(RTC_CLOCK_MODE);
    Day = RTC_GetDay(RTC_CLOCK_MODE);
    /* Set UART0 display */
    /* Dispaly year */
    RTC_Disp_YMD[0] = ' ';
    RTC_Disp_YMD[1] = (Year / 10U) + 0x30U;
    RTC_Disp_YMD[2] = (Year % 10U) + 0x30U;
    RTC_Disp_YMD[3] = '-';
    /* Display month */
    RTC_Disp_YMD[4] = (Month / 10U) + 0x30U;
    RTC_Disp_YMD[5] = (Month % 10U) + 0x30U;
    RTC_Disp_YMD[6] = '-';
    /* Display date */
    RTC_Disp_YMD[7] = (Date / 10U) + 0x30U;
    RTC_Disp_YMD[8] = (Date % 10U) + 0x30U;

    RTC_Disp_YMD[9] = ' ';
    RTC_Disp_YMD[10] = ' ';
    RTC_Disp_YMD[11] = ' ';
    /* Display day */
    switch (Day) {
    case RTC_SUN:
        RTC_Disp_YMD[12] = 'S';
        RTC_Disp_YMD[13] = 'U';
        RTC_Disp_YMD[14] = 'N';
        break;
    case RTC_MON:
        RTC_Disp_YMD[12] = 'M';
        RTC_Disp_YMD[13] = 'O';
        RTC_Disp_YMD[14] = 'N';
        break;
    case RTC_TUE:
        RTC_Disp_YMD[12] = 'T';
        RTC_Disp_YMD[13] = 'U';
        RTC_Disp_YMD[14] = 'E';
        break;
    case RTC_WED:
        RTC_Disp_YMD[12] = 'W';
        RTC_Disp_YMD[13] = 'E';
        RTC_Disp_YMD[14] = 'D';
        break;
    case RTC_THU:
        RTC_Disp_YMD[12] = 'T';
        RTC_Disp_YMD[13] = 'H';
        RTC_Disp_YMD[14] = 'U';
        break;
    case RTC_FRI:
        RTC_Disp_YMD[12] = 'F';
        RTC_Disp_YMD[13] = 'R';
        RTC_Disp_YMD[14] = 'I';
        break;
    case RTC_SAT:
        RTC_Disp_YMD[12] = 'S';
        RTC_Disp_YMD[13] = 'A';
        RTC_Disp_YMD[14] = 'T';
        break;
    default:
        /* Do nothing */
        break;
    }
    RTC_Disp_YMD[15] = '\0';
	UART_Print(UART, RTC_Disp_YMD);
}