コード例 #1
0
ファイル: touchscreen-hw.c プロジェクト: lireric/ssn
//static
void tshw_prepare_wait(void)
{
	/* 
	 * Drive Y low and enable a pull-up on X. When touchscreen is
	 * pressed X will be pulled low by Y and an interrupt will be
	 * generated
	 */
	GPIO_SetOutput(TS_PIN_YD, 0);
	GPIO_SetOutput(TS_PIN_YU, 0);
	GPIO_SetInputPulledUp(TS_PIN_XL | TS_PIN_XR);
}
コード例 #2
0
ファイル: led.c プロジェクト: coocox/Mplib
/*************************************************************************
 * Function Name: LED_Init
 * Parameters:None
 *
 * Return:None  
 *
 * Description: Init LED ports
 *
 *************************************************************************/
void LED_Init()
{
	/*Set PG bit0~3 output and turn off all leds*/
    GPIO_SetOutput(GPIO_PG, GPIO_BIT_0);
    GPIO_SetOutput(GPIO_PG, GPIO_BIT_1);
    GPIO_SetOutput(GPIO_PG, GPIO_BIT_2);
    GPIO_SetOutput(GPIO_PG, GPIO_BIT_3);

    GPIO_WriteDataBit(GPIO_PG, GPIO_BIT_0, GPIO_BIT_VALUE_0);
    GPIO_WriteDataBit(GPIO_PG, GPIO_BIT_1, GPIO_BIT_VALUE_0);
    GPIO_WriteDataBit(GPIO_PG, GPIO_BIT_2, GPIO_BIT_VALUE_0);
    GPIO_WriteDataBit(GPIO_PG, GPIO_BIT_3, GPIO_BIT_VALUE_0);
}
コード例 #3
0
void Commands_SetPinConfig(uint8_t* data)
{
	switch (data[1])
	{
		case MakeDigitalInput:
			GPIO_SetInput(data[0], data[2]);
			pinConfigs[data[0]] = DigitalInput;
			break;
		case MakeDigitalOutput:
			GPIO_SetOutput(data[0]);
			pinConfigs[data[0]] = DigitalOutput;
			break;
		case SetDigitalValue:
			GPIO_WriteValue(data[0], data[2]);
			break;
		case MakeAnalogInput:
			ADC_SetInput(data[0]);
			pinConfigs[data[0]] = AnalogInput;
			break;
		case MakePWMPin:
			PWM_SetOutput(data[0], data[2]);
			break;
		case SetPWMValue:
			PWM_SetValue(data[0], data[2], data[3]);
			break;


	}
}
コード例 #4
0
ファイル: sw.c プロジェクト: coocox/Mplib
/*******************************************************************************
* Function Name  : SW_Init
* Description    : Initialize the GPIO to SW 
* Input          : None 
* Return         : None.
*******************************************************************************/
void SW_Init(void)
{
    GPIO_SetInput(GPIO_PH, 0x03U);
    GPIO_SetInput(GPIO_PK, 0x03U);

    GPIO_SetOutput(SWS_DATA_PORT, GPIO_BIT_2);
}
コード例 #5
0
ファイル: Example_TimerPpg.c プロジェクト: coocox/Mplib
/**
  * @brief  TMRB_PPG demo
  * @param  None
  * @retval None
  */
void Example_TimerPpg(void)
{
    uint8_t Rate = 0U;
    uint32_t Duty[5] = { 0x8CAU, 0x753U, 0x4E2U, 0x271U, 0xFAU };       /* duty: 10%, 25%, 50%, 75%, 90% */
    uint8_t keyvalue;

    TMRB_InitTypeDef m_tmrb;
    TMRB_FFOutputTypeDef PPGFFInital;

    GPIO_SetInput(KEYPORT, GPIO_BIT_0); /* set KEY port to input */ 

    /* Set PF1 as TB7OUT for PPG output */
    GPIO_SetOutput(GPIO_PF, GPIO_BIT_1);
    GPIO_EnableFuncReg(GPIO_PF, GPIO_FUNC_REG_1, GPIO_BIT_1);
    GPIO_SetPullUp(GPIO_PF, GPIO_BIT_1, ENABLE);

    m_tmrb.Mode = TMRB_INTERVAL_TIMER;
    m_tmrb.ClkDiv = TMRB_CLK_DIV_8;
    m_tmrb.UpCntCtrl = TMRB_AUTO_CLEAR;
    m_tmrb.Cycle = TMRB7TIME;   /* T = 250us */
    m_tmrb.Duty = Duty[Rate];
    PPGFFInital.FlipflopCtrl = TMRB_FLIPFLOP_CLEAR;
    PPGFFInital.FlipflopReverseTrg = TMRB_FLIPFLOP_MATCH_CYCLE | TMRB_FLIPFLOP_MATCH_DUTY;

    TMRB_Enable(TSB_TB7);
    TMRB_Init(TSB_TB7, &m_tmrb);
    TMRB_SetFlipFlop(TSB_TB7, &PPGFFInital);
    TMRB_SetDoubleBuf(TSB_TB7, ENABLE, TMRB_WRITE_REG_SEPARATE);        /* enable double buffer */
    TMRB_SetRunState(TSB_TB7, TMRB_RUN);

    do {                        /* wait if key is pressed */
        keyvalue = GPIO_ReadDataBit(KEYPORT, GPIO_BIT_0);
    } while (GPIO_BIT_VALUE_1 == keyvalue);

    delay(0xFFFU);              /* noise cancel */

    while (1) {
        do {                    /* wait if key is released */
            keyvalue = GPIO_ReadDataBit(KEYPORT, GPIO_BIT_0);
        } while (GPIO_BIT_VALUE_0 == keyvalue);

        delay(0xFFFU);          /* noise cancel */

        Rate++;
        if (Rate >= DUTYMAX) {  /* change duty rate */
            Rate = DUTYINIT;
        } else {
            /* Do nothing */
        }

        TMRB_ChangeDuty(TSB_TB7, Duty[Rate]); /* change duty rate */

        do {                    /* wait if key is pressed */
            keyvalue = GPIO_ReadDataBit(KEYPORT, GPIO_BIT_0);
        } while (GPIO_BIT_VALUE_1 == keyvalue);

        delay(0xFFFU);          /* noise cancel */
    }
}
コード例 #6
0
ファイル: WDT_NMI.c プロジェクト: coocox/Mplib
/*************************************************************************
 * Function Name: LED_Init
 * Parameters:None
 *
 * Return:None  
 *
 * Description: Init LED ports
 *
 *************************************************************************/
void LED_Init(void)
{
    uint8_t led_off;
    led_off = (uint8_t) (~LED_ALL);
    GPIO_SetOutput(LED_DATA_PORT, LED_ALL);
    GPIO_WriteData(LED_DATA_PORT, led_off);

}
コード例 #7
0
ファイル: CAN_TestLoopBack.c プロジェクト: coocox/Mplib
/**
  * @brief  CAN port initialization
  * @param  None.
  * @retval None.
  */
void CAN_PortInit(void)
{
    GPIO_SetOutput(GPIO_PE, GPIO_BIT_4);        /* Set TX pin as output */
    GPIO_SetInput(GPIO_PE, GPIO_BIT_5); /* Set RX pin as input */
    GPIO_EnableFuncReg(GPIO_PE, GPIO_FUNC_REG_3, (uint8_t) (GPIO_BIT_4 | GPIO_BIT_5));  /* Enable TX and RX pin functions */
    GPIO_SetOpenDrain(GPIO_PE, GPIO_BIT_4, DISABLE);    /* Set TX pin as CMOS output */
    GPIO_SetPullUp(GPIO_PE, (uint8_t) (GPIO_BIT_4 | GPIO_BIT_5), DISABLE);      /* Disable pull-ups for CAN pins */
}
コード例 #8
0
ファイル: Example_TMRB_PPG.c プロジェクト: coocox/Mplib
/**
  * @brief  The main function of TMRB_PPG demo
  * @param  None
  * @retval None
  */
void Example_TMRB_PPG(void)
{

    uint32_t Duty[5] = { 0x1194U, 0xEA6U, 0x9C4U, 0x4E2U, 0x1F4U };     /* duty: 10%, 25%, 50%, 75%, 90% */
    uint8_t keyvalue;

    TMRB_InitTypeDef m_tmrb;
    TMRB_FFOutputTypeDef PPGFFInital;

    /* LCD & switch initialization */
    LCD_Configuration();
    SW_Init();

    /* Set PA5 as TB6OUT for PPG output */
    GPIO_SetOutput(GPIO_PA, GPIO_BIT_5);
    GPIO_EnableFuncReg(GPIO_PA, GPIO_FUNC_REG_2, GPIO_BIT_5);

    m_tmrb.Mode = TMRB_INTERVAL_TIMER;
    m_tmrb.ClkDiv = TMRB_CLK_DIV_8;
    m_tmrb.UpCntCtrl = TMRB_AUTO_CLEAR;
    m_tmrb.Cycle = TMRB6TIME;   /* T = 500us */
    m_tmrb.Duty = Duty[Rate];
    PPGFFInital.FlipflopCtrl = TMRB_FLIPFLOP_CLEAR;
    PPGFFInital.FlipflopReverseTrg = TMRB_FLIPFLOP_MATCH_CYCLE | TMRB_FLIPFLOP_MATCH_DUTY;

    TMRB_Enable(TSB_TB6);
    TMRB_Init(TSB_TB6, &m_tmrb);
    TMRB_SetFlipFlop(TSB_TB6, &PPGFFInital);
    TMRB_SetDoubleBuf(TSB_TB6, ENABLE, TMRB_WRITE_REG_SEPARATE);        /* enable double buffer */
    TMRB_SetRunState(TSB_TB6, TMRB_RUN);

    do {                        /* Handle the condition that start with the SW0 is high*/
        keyvalue = GPIO_ReadDataBit(KEYPORT, GPIO_BIT_0);
        duty_display();
    } while (GPIO_BIT_VALUE_1 == keyvalue);

    delay(0xFFFFU);             /* noise cancel */

    while (1) {       
        do {
            keyvalue = GPIO_ReadDataBit(KEYPORT, GPIO_BIT_0);   /* display when switch is low */
            duty_display();
        } while (GPIO_BIT_VALUE_0 == keyvalue);
        delay(0xFFFFU);         /* noise cancel */
        Rate++;
        if (Rate >= DUTYMAX) {  /* change duty rate */
            Rate = DUTYINIT;
        } else {
            /* Do nothing */
        }
        TMRB_ChangeDuty(TSB_TB6, Duty[Rate]);
        do {
            keyvalue = GPIO_ReadDataBit(KEYPORT, GPIO_BIT_0);   /* display when switch is high */
            duty_display();
        } while (GPIO_BIT_VALUE_1  == keyvalue);
        delay(0xFFFFU);         /* noise cancel */
    }
}
コード例 #9
0
ファイル: Flash_Userboot.c プロジェクト: coocox/Mplib
/*******************************************************************************
* Function Name  : SW_Init
* Description    : Initialize the GPIO to SW 
* Input          : None 
* Return         : None.
*******************************************************************************/
void SW_Init(void)
{
    GPIO_SetInput(GPIO_PI, GPIO_BIT_0);
    GPIO_SetInput(GPIO_PI, GPIO_BIT_1);
    GPIO_SetInput(GPIO_PI, GPIO_BIT_2);
    GPIO_SetInput(GPIO_PI, GPIO_BIT_3);
    
    GPIO_SetOutput(GPIO_PJ, GPIO_BIT_2);
}
コード例 #10
0
ファイル: main.c プロジェクト: Bob0505/MSP430G2-HelloWord
int main(void) {

	GPIO_SETTING	gpiosettings;

	WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer
#if	0
	// initialize P1.0 output Low and P1.6 output High
	gpiosettings.r.Direction= GPIO_Output;
	gpiosettings.r.output	= GPIO_Low;
    GPIO_SetOutput( GPIO_Port1, BIT0, &gpiosettings);
	gpiosettings.r.output	= GPIO_High;
    GPIO_SetOutput( GPIO_Port1, BIT6, &gpiosettings);

	while (1) {
		P1OUT ^= BIT0;				// Toggle LED on P1.0
		P1OUT ^= BIT6;				// Toggle LED on P1.6
		__delay_cycles(100000);		// Wait ~100ms at default DCO of ~1MHz
	}
}
コード例 #11
0
void set_segment(uint8_t seg, uint8_t state)
{
  GPIO_HANDLE* handle = 0;
  switch(seg) {
    case 0: handle = &SEGA; break;
    case 1: handle = &SEGB; break;
    case 2: handle = &SEGC; break;
    case 3: handle = &SEGD; break;
    case 4: handle = &SEGE; break;
    case 5: handle = &SEGF; break;
    case 6: handle = &SEGG; break;
    case 7: handle = &SEGDP; break;
    default:
      return;
  }
  if (state == 0)
    GPIO_SetOutput(GPIO_HIGH, handle);
  else if (state == 1)
    GPIO_SetOutput(GPIO_LOW, handle);
}
コード例 #12
0
ファイル: touchscreen-hw.c プロジェクト: lireric/ssn
//static
void tshw_get_raw(uint16_t *adc_x, uint16_t *adc_y)
{
	uint32_t val1, val2;
	
	/*
	 * YD=0 YU=1, measure XL and XR
	 * YD=1 YU=0, measure XL and XR
	 * The average of the previous four samples is the X value.
	 *
	 * XL=0 XR=1, measure YD and YU
	 * XL=1 XR=0, measure YD and YU
	 * The average of the previous four samples is the Y value.
	 *
	 * A total of 8 ADC measurements are needed!
	 */
	
	GPIO_SetAnalog(TS_PIN_XL | TS_PIN_XR);
	GPIO_SetOutput(TS_PIN_YD, 0);
	GPIO_SetOutput(TS_PIN_YU, 1);
	delay(100);
	val1 = (ADC_Measure(TS_ADCCH_XL) + ADC_Measure(TS_ADCCH_XR))/2;
	
	GPIO_SetOutput(TS_PIN_YD, 1);
	GPIO_SetOutput(TS_PIN_YU, 0);
	delay(100);
	val2 = (ADC_Measure(TS_ADCCH_XL) + ADC_Measure(TS_ADCCH_XR))/2;
	
	*adc_y = (val1+((1<<12)-val2))/4;
	
	GPIO_SetAnalog(TS_PIN_YD | TS_PIN_YU);
	GPIO_SetOutput(TS_PIN_XL, 0);
	GPIO_SetOutput(TS_PIN_XR, 1);
	delay(100);
	val1 = (ADC_Measure(TS_ADCCH_YD) + ADC_Measure(TS_ADCCH_YU))/2;

	GPIO_SetOutput(TS_PIN_XL, 1);
	GPIO_SetOutput(TS_PIN_XR, 0);
	delay(100);
	val2 = (ADC_Measure(TS_ADCCH_YD) + ADC_Measure(TS_ADCCH_YU))/2;
	
	*adc_x = (val1+((1<<12)-val2))/4;
}
コード例 #13
0
ファイル: Example_VLTD_Reset.c プロジェクト: coocox/Mplib
void Example_VLTD_Reset(void)
{
    WDT_Disable();                        /* Disable WDT explicitly */
    GPIO_SetOutput(GPIO_PG, GPIO_BIT_0);  /* Set PG0 as output port */

    if (CG_GetResetFlag().Bit.VLTDReset == 0U) {
        VLTD_SetVoltage(VLTD_DETECT_VOLTAGE_46);  /* change the parameter to select
                                                     different detection voltage */
        VLTD_Enable();                    /* Enable VLTD function */
        GPIO_WriteData(GPIO_PG, 0x00);    /* Set PG0 to LOW */
    } else {
        VLTD_Disable();                   /* Disable VLTD function */
        GPIO_WriteData(GPIO_PG, 0x01);    /* Set PG0 to HIGH */
    }

    while (1) {
        /* Do nothing */
    }
}
コード例 #14
0
ファイル: TMRB_TIMER.c プロジェクト: coocox/Mplib
void TMRB_TIMER(void)
{
    TMRB_InitTypeDef m_tmrb;

    CG_InitSystem();            /* CG_SetSystem */
    GPIO_SetOutput(GPIO_PA,0xFFU);    
    GPIO_WriteData(GPIO_PA,0xFFU); /* LED initialize */
    LedOff(LED1 | LED2 | LED3 | LED4);

    m_tmrb.Mode = TMRB_INTERVAL_TIMER;
    m_tmrb.ClkDiv = TMRB_CLK_DIV_8;
    m_tmrb.Cycle = TMRB_1MS;    /* periodic time is 1ms */
    m_tmrb.UpCntCtrl = TMRB_AUTO_CLEAR;
    m_tmrb.Duty = TMRB_1MS;     /* periodic time is 1ms */

    TMRB_Enable(TSB_TB0);
    TMRB_Init(TSB_TB0, &m_tmrb);
    NVIC_EnableIRQ(INTTB0_IRQn);
    TMRB_SetRunState(TSB_TB0, TMRB_RUN);
    while (1) {
        /* Do nothing */
    }
}
コード例 #15
0
ファイル: led.c プロジェクト: coocox/Mplib
/*************************************************************************
 * Function Name: LED_Init
 * Parameters:None
 *
 * Return:None  
 *
 * Description: Init LED ports
 *
 *************************************************************************/
void LED_Init(void)
{
    /* PC0,PC1,PC2,PC3 */
    GPIO_SetOutput(LED_DATA_PORT, 0x0FU);
    GPIO_WriteData(LED_DATA_PORT, 0x00U);
}
コード例 #16
0
ファイル: SSP_LoopBack.c プロジェクト: coocox/Mplib
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 };

    /* 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(TSB_SSP0, &initSSP);

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

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

    /* initialize LEDs on M366-SK board before display something */
    GPIO_SetOutput(GPIO_PA,0xFFU);    
    GPIO_WriteData(GPIO_PA,0xFFU); 

    while (1) {

        datTx++;
        /* send data if Tx FIFO is available */
        fifoState = SSP_GetFIFOState(TSB_SSP0, SSP_TX);
        if ((fifoState == SSP_FIFO_EMPTY) || (fifoState == SSP_FIFO_NORMAL)) {
            SSP_SetTxData(TSB_SSP0, 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(TSB_SSP0, SSP_RX);
        if ((fifoState == SSP_FIFO_FULL) || (fifoState == SSP_FIFO_NORMAL)) {
            receive = SSP_GetRxData(TSB_SSP0);
            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();
                result = Buffercompare(Tx_Buf, Rx_Buf, MAX_BUFSIZE);
            }

        } else {
            /* do nothing */
        }

        DisplayLED(receive);
    }
}