コード例 #1
0
ファイル: main.c プロジェクト: teamjft/NUVOTON-NUC200
/*----------------------------------------------------------------------------*/
void Test_BasicMode_Tx()
{
    int32_t delaycount;
    STR_CANMSG_T msg1;
    delaycount=1000;
    CAN_EnterTestMode(CAN_TESTR_BASIC);	                                       
    CAN_EnableInt(CAN_CON_IE|CAN_CON_SIE);

    /* Send Message No.1 */
    msg1.FrameType= DATA_FRAME;
    msg1.IdType   = CAN_STD_ID;
	msg1.Id       = 0x001;
    msg1.DLC      = 2;
	msg1.Data[0]  = 0x00;
    msg1.Data[1]  = 0x2;
    CAN_BasicSendMsg(&msg1);
    printf("Send STD_ID:0x1,Data[0,2]\n");
    SYS_SysTickDelay(delaycount);
      
    /* Send Message No.2 */
    msg1.FrameType= DATA_FRAME;
    msg1.IdType   = CAN_STD_ID;
	msg1.Id       = 0x1AC;
    msg1.DLC      = 8;
	msg1.Data[0]  = 0x11;
    msg1.Data[1]  = 0x12;
    msg1.Data[2]  = 0x13;
    msg1.Data[3]  = 0x14;
	msg1.Data[4]  = 0x15;
    msg1.Data[5]  = 0x16;
    msg1.Data[6]  = 0x17;
    msg1.Data[7]  = 0x18;
  
    CAN_BasicSendMsg(&msg1);
    printf("Send STD_ID:0x1AC,Data[11,12,13,14,15,16,17,18]\n");
    SYS_SysTickDelay(delaycount);

    /* Send Message No.3 */
    msg1.FrameType= DATA_FRAME;
    msg1.IdType   = CAN_STD_ID;
	msg1.Id       = 0x310;
    msg1.DLC      = 8;
	msg1.Data[0]  = 0x21;
    msg1.Data[1]  = 0x22;
    msg1.Data[2]  = 0x23;
    msg1.Data[3]  = 0x24;
	msg1.Data[4]  = 0x25;
    msg1.Data[5]  = 0x26;
    msg1.Data[6]  = 0x27;
    msg1.Data[7]  = 0x28;
    CAN_BasicSendMsg(&msg1);
    printf("Send STD_ID:0x310,Data[21,22,23,24,25,26,27,28]\n");
    SYS_SysTickDelay(delaycount);

    /* Send Message No.4 */
    msg1.FrameType= DATA_FRAME;    
    msg1.IdType   = CAN_EXT_ID;
    msg1.Id       = 0x3377;
    msg1.DLC      = 8;
	msg1.Data[0]  = 0x31;
    msg1.Data[1]  = 0x32;
    msg1.Data[2]  = 0x33;
    msg1.Data[3]  = 0x34;
	msg1.Data[4]  = 0x35;
    msg1.Data[5]  = 0x36;
    msg1.Data[6]  = 0x37;
    msg1.Data[7]  = 0x38;   
    CAN_BasicSendMsg(&msg1);
    printf("Send EXT_ID:0x3377,Data[31,32,33,34,35,36,37,38]\n");
    SYS_SysTickDelay(delaycount);

    /* Send Message No.5 */
    msg1.FrameType= DATA_FRAME;    
    msg1.IdType   = CAN_EXT_ID;
    msg1.Id       = 0x7755;
    msg1.DLC      = 8;
	msg1.Data[0]  = 0x41;
    msg1.Data[1]  = 0x42;
    msg1.Data[2]  = 0x43;
    msg1.Data[3]  = 0x44;
	msg1.Data[4]  = 0x45;
    msg1.Data[5]  = 0x46;
    msg1.Data[6]  = 0x47;
    msg1.Data[7]  = 0x48;  
    CAN_BasicSendMsg(&msg1);
    printf("Send EXT_ID:0x7755,Data[41,42,43,44,45,46,47,48]\n");
    SYS_SysTickDelay(delaycount);
    CAN_LeaveTestMode();

}
コード例 #2
0
ファイル: main.c プロジェクト: teamjft/NUVOTON-NUC200
/*----------------------------------------------------------------------------*/
void Test_NormalMode_Tx()
{
    STR_CANMSG_T tMsg;

	/* Send a 11-bits message */
    tMsg.FrameType= DATA_FRAME;
    tMsg.IdType   = CAN_STD_ID;
    tMsg.Id       = 0x7FF;
    tMsg.DLC      = 2;
    tMsg.Data[0]  = 7;
    tMsg.Data[1]  = 0xFF;    

    if(CAN_SetTxMsgObj(MSG(0),&tMsg) < 0)     /* Call CAN_SetTxMsgObj() only Confiugre Msg RAM */
    {
        printf("Set Tx Msg Object failed\n");
        return;
    }
	CAN_SetTxRqst(MSG(0));                    /* Call CAN_SetTxRqst() requeset to send the Msg in the RAM */
    printf("MSG(0).Send STD_ID:0x7FF, Data[07,FF]done\n");

    if(CAN_SetTxMsgObj(MSG(1),&tMsg) < 0)    
    {
        printf("Set Tx Msg Object failed\n");
        return;
    }
	/* Send a 29-bits message */
    tMsg.FrameType= DATA_FRAME;
    tMsg.IdType   = CAN_EXT_ID;
    tMsg.Id       = 0x12345;
    tMsg.DLC      = 3;
    tMsg.Data[0]  = 1;
    tMsg.Data[1]  = 0x23;
    tMsg.Data[2]  = 0x45;        

    if(CAN_SetTxMsgObj(MSG(1),&tMsg) < 0)    
    {
        printf("Set Tx Msg Object failed\n");
        return;
    }
	CAN_SetTxRqst(MSG(1));              
    printf("MSG(1).Send EXT:0x12345 ,Data[01,23,45]done\n");  
 
	/* Send a data message */
    tMsg.FrameType= DATA_FRAME;
    tMsg.IdType   = CAN_EXT_ID;
    tMsg.Id       = 0x7FF01;
    tMsg.DLC      = 4;
    tMsg.Data[0]  = 0xA1;
    tMsg.Data[1]  = 0xB2;
    tMsg.Data[2]  = 0xC3;        
    tMsg.Data[3]  = 0xD4;        

    if(CAN_SetTxMsgObj(MSG(3),&tMsg) < 0)    
    {
        printf("Set Tx Msg Object failed\n");
        return;
    }
	CAN_SetTxRqst(MSG(3));                
    printf("MSG(3).Send EXT:0x7FF01 ,Data[A1,B2,C3,D4]done\n");  
	SYS_SysTickDelay(1000000); //Delay one second to wait INT
	printf("Trasmit Done!\nCheck the receive host received data\n");

}
コード例 #3
0
ファイル: main.c プロジェクト: teamjft/NUVOTON-NUC200
/*---------------------------------------------------------------------------------------------------------*/
int main (void)
{

    /* Init System, IP clock and multi-function I/O */
    SYS_Init();     

    /* Init UART0 for printf */
    UART0_Init();
    
    /* Init I2C */
    I2C_Init();

#if defined(DEMO_OPT_SLAVE) // I2S is slave     
    /* 
       I2S is initialized to be slave mode.
       I2S must output 6MHz MCLK to WAU8822.
       Init Codec WAU8822 to be in master mode
       WAU8822 will use MCLK of I2S to generate required 256fs(ex: 12.288MHz) and output BCLK, LR.
       Let WAU8822 be master could get more precise sampling rate.
    
       Supported sample rate are (Deviation dependent on codec):
            48kHz, 32kHz, 24kHz, 16kHz, 12kHz and 8kHz.

       Clock configuration summary: 
    
           XTAL = 12MHz
           PLL = According to HCLK (Independent to sampling rate)
           HCLK = User define (Independent to sampling rate)
           I2S_S = XTAL
           MCLK = 6MHz (XTAL / 2)
           BCLK = (From codec)
           fs   = 8000Hz, 12000Hz, ... 48000Hz
           
    */
    I2S_Init(0, 0); // I2S Slave Init, MCLK = 6MHz
    WAU8822_Init(WAU8822_INIT_MASTER | WAU8822_INIT_SR32000 | 
                 WAU8822_INIT_OUT_HP_L | WAU8822_INIT_OUT_HP_R | 
                 WAU8822_INIT_IN_MIC_L //| 
                 //WAU8822_INIT_IN_AUX_L | WAU8822_INIT_IN_AUX_R
                );
#elif defined(DEMO_OPT_MASTER_NOUSB) // I2S is master without USB applications                
    /* 
       I2S is initialized to be master mode.
       I2S must output 256*fs MCLK to WAU8822.
       Init Codec WAU8822 to be in slave mode.
       
       Supported sample rate are (Deviation for 48kHz, 32kHz,... are all 0.0186%):
       
            47991.071Hz, 31994.048Hz, 23995.536Hz, 15997.024Hz, 11997.768Hz, (7998.5119Hz)
            
       
       Clock configuration summary for 47991.071Hz, 31994.048Hz, 23995.536Hz, 15997.024Hz:
        
           XTAL = 12MHz
           PLL = 147428571.4Hz (PLLCON = SYSCLK_PLLCON_FOR_I2S)
           HCLK = PLL / 3 = 49142857.14Hz
           I2S_S = HCLK
           MCLK = 256*fs (MCLK DIV = 4, 6, 8, 12)
           BCLK = 8*fs (BCLK DIV = 32, 48, 64, 96)
           fs = 47991.071Hz, 31994.048Hz, 23995.536Hz, 15997.024Hz
           
       Clock configuration summary for 11997.768Hz, 7998.5119Hz:
        
           XTAL = 12MHz
           PLL = 147428571.4Hz (PLLCON = 0xA54)
           HCLK = PLL / 6 = 24571428.57Hz
           I2S_S = HCLK
           MCLK = 256*fs (MCLK DIV = 8, 12)
           BCLK = 8*fs (BCLK DIV = 64, 96)
           fs = 11997.768Hz, 7998.5119Hz
           
    */
    I2S_Init(1, 32000); // I2S Init to Master, MCLK = 256 * fs
    WAU8822_Init(WAU8822_INIT_SLAVE | WAU8822_INIT_SR32000 | 
                 WAU8822_INIT_OUT_HP_L | WAU8822_INIT_OUT_HP_R | 
                 WAU8822_INIT_IN_MIC_L //| 
                 //WAU8822_INIT_IN_AUX_L | WAU8822_INIT_IN_AUX_R
                );

#elif defined(DEMO_OPT_MASTER_USB) // I2S is master with USB applications
    /* 
       I2S is initialized to be master mode and work with USB (48MHz clock is necessary)
       I2S must output 256*fs MCLK to WAU8822.
       Init Codec WAU8822 to be in slave mode.
       
       Supported sample rate are (Deviation for 48kHz, 32kHz, ... are all 2.3438%):
       
            46875Hz, 31250Hz, 23437.5Hz, 15625Hz, 11718.75Hz, (7812.5Hz)
            
       
       Clock configuration summary for 46875Hz, 31250Hz, 23437.5Hz, 15625Hz:
        
           XTAL = 12MHz
           PLL = 48MHz (PLLCON = SYSCLK_PLLCON_48MHz_XTAL)
           HCLK = PLL / 1 = 48MHz
           I2S_S = HCLK
           MCLK = 256*fs (MCLK DIV = 4, 6, 8, 12)
           BCLK = 8*fs (BCLK DIV = 32, 48, 64, 96)
           fs = 46875Hz, 31250Hz, 23437.5Hz, 15625Hz
           
       Clock configuration summary for 11718.75Hz, 7812.5Hz:
        
           XTAL = 12MHz
           PLL = 48MHz (PLLCON = SYSCLK_PLLCON_48MHz_XTAL)
           HCLK = PLL / 2 = 24MHz
           I2S_S = HCLK
           MCLK = 256*fs (MCLK DIV = 8, 12)
           BCLK = 8*fs (BCLK DIV = 64, 96)
           fs = 11718.75Hz, 7812.5Hz
       
    */
    I2S_Init(1, 12000); // I2S Master Init, MCLK = 256*fs
    WAU8822_Init(WAU8822_INIT_SLAVE | WAU8822_INIT_SR12000 | 
                 WAU8822_INIT_OUT_HP_L | WAU8822_INIT_OUT_HP_R | 
                 WAU8822_INIT_IN_MIC_L //| 
                 //WAU8822_INIT_IN_AUX_L | WAU8822_INIT_IN_AUX_R
                );
#endif

    MUTE_OFF();

    printf("+----------------------------------------------+\n");
    printf("|        NUC200 I2S Driver Sample Code         |\n");
    printf("+----------------------------------------------+\n");
	printf("\n");
    printf("    Working ...\n");
    printf("    User can measure LRCLK to check sampling rate.\n");
    
    /* Toggle PC15 to indicate we are working. */
    while(1)
    {
        SYS_SysTickDelay(100000);
        PC15 ^= 1;
    }

}
コード例 #4
0
ファイル: main.c プロジェクト: lazhartel/tinythread
/*---------------------------------------------------------------------------------------------------------*/
int32_t main(void)
{
    int32_t  i32Err = 0;
    uint32_t u32Data, u32ImageSize, i, j, *pu32Loader;

    /* Init system, IP clock and multi-function I/O */
    SYS_Init();

    /* Init UART0 for printf */
    UART0_Init();

    /* Init GPIO P2.0 (output) and P3.2 (EINT0) */
    GPIO_Init();

    /* Init SPI0 and LCD */
    LCD_Init();
    LCD_EnableBackLight();
    LCD_ClearScreen();


    /* 
        This sample shows how to switch between APROM and LDROM. 
        Target: 
            Smpl_FMC
                Smpl_FMC is the code for APROM. It will program the firmware to LDROM and
                user can press SW_INT to change to boot from LDROM. 
                In APROM, the LED blanking interval is 200ms.
            Smpl_LDROM
                Smpl_LDROM is the code for LDROM. User can press SW_INT to change to boot from APROM.
                In LDROM, the LED blanking interval is 1000ms.
    */
    LCD_Print(0, "Boot from APROM");
    LCD_Print(1, "Press SW_INT   ");
    while (1)
    {
        if(g_u8IsPress)
        {
            g_u8IsPress = FALSE;

            /* Unlock protected registers to write ISP Control Register (ISPCON) */
            SYS_UnlockReg();

            /* Program sample LD code to LDROM */

            /* Enable ISP LDROM update function */
            FMC->ISPCON = FMC_ISPCON_LDUEN_Msk | FMC_ISPCON_ISPEN_Msk;

            /* Page Erase LDROM */
            for (i = 0;i < 4096;i += PAGE_SIZE)
                FMC_Erase(LDROM_BASE + i);


            /* Erase Verify */
            i32Err = 0;
            for (i = LDROM_BASE; i < (LDROM_BASE + 4096); i += 4)
            {
                u32Data = FMC_Read(i);

                if (u32Data != 0xFFFFFFFF)
                {
                    i32Err = 1;
                }
            }


            u32ImageSize = (uint32_t)&g_u32LoaderImageLimit - (uint32_t)&g_u32LoaderImageBase;

            pu32Loader = (uint32_t *)&g_u32LoaderImageBase;
            for (i = 0;i < u32ImageSize;i += PAGE_SIZE)
            {
                FMC_Erase(LDROM_BASE + i);
                for (j = 0;j < PAGE_SIZE;j += 4)
                {
                    FMC_Write(LDROM_BASE + i + j, pu32Loader[(i + j) / 4]);
                }
            }

            /* Verify loader */
            i32Err = 0;
            for (i = 0;i < u32ImageSize;i += PAGE_SIZE)
            {
                for (j = 0;j < PAGE_SIZE;j += 4)
                {
                    u32Data = FMC_Read(LDROM_BASE + i + j);
                    if (u32Data != pu32Loader[(i+j)/4])
                        i32Err = 1;

                    if (i + j >= u32ImageSize)
                        break;
                }


            }

            if(i32Err)
            {
                LCD_ClearScreen();
                LCD_Print(0,"LDROM write fail");
            }
            else
            {
                /* Switch to boot from LDROM */
                FMC->ISPCON = FMC_ISPCON_BS_LDROM;
                _SYS_RESET_CPU();
            }

            while (1);
        }
        else
        {
            /* LED blanking for 200ms */
            P2->DOUT ^= 1;
            SYS_SysTickDelay(100000);
        }

        

    }
}
コード例 #5
0
ファイル: EEPROM_24LC64.c プロジェクト: writeing/TW3-16
void EEPROM_Write ( uint32_t u32Addr, uint8_t u8Data )
{
    int32_t i32Err;

    do
        {
            i32Err = 0;
            /* Send start */
            _I2C_START ( I2C0 );
            _I2C_WAIT_READY ( I2C0 );
            /* Send control byte */
            _I2C_WRITE ( I2C0, EEPROM_WRITE_ADDR );
            _I2C_WAIT_READY ( I2C0 );

            if ( I2C0->I2CSTATUS == 0x18 )
                {
                    /* ACK */
                    /* Send high address */
                    _I2C_WRITE ( I2C0, ( u32Addr >> 8 ) & 0xFFUL ); // high address
                    _I2C_WAIT_READY ( I2C0 );

                    if ( I2C0->I2CSTATUS == 0x28 )
                        {
                            /* ACK */
                            /* Send low address */
                            _I2C_WRITE ( I2C0, u32Addr & 0xFFUL ); // low address
                            _I2C_WAIT_READY ( I2C0 );

                            if ( I2C0->I2CSTATUS == 0x28 )
                                {
                                    /* ACK */
                                    /* Send data */
                                    _I2C_WRITE ( I2C0, u8Data ); // data
                                    _I2C_WAIT_READY ( I2C0 );

                                    if ( I2C0->I2CSTATUS == 0x28 )
                                        {
                                            /* ACK */
                                            /* Send stop */
                                            _I2C_STOP ( I2C0 );
                                        }

                                    else
                                        {
                                            /* NACK */
                                            /* Send data error */
                                            i32Err = 4;
                                        }
                                }

                            else
                                {
                                    /* NACK */
                                    /* Send low address error */
                                    i32Err = 3;
                                }
                        }

                    else
                        {
                            /* NACK */
                            /* Send high address error */
                            i32Err = 2;
                        }
                }

            else
                {
                    /* NACK */
                    /* Send control error */
                    i32Err = 1;
                }

            if ( i32Err )
                {
                    /* Send stop */
                    _I2C_STOP ( I2C0 );
                    SYS_SysTickDelay ( 100 );
                }
        }