Example #1
0
void pinMode(uint8_t pin, uint8_t mode)
{

	volatile uint32_t *dir;
	volatile uint8_t *sel;
	volatile uint32_t *out;
	volatile uint32_t *pud;
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);
	dir = portDirRegister(port);
	sel = portSelRegister(port);
	out = portOutputRegister(port);
	pud = portPullupRegister(port);

	if (port == NOT_A_PORT) return;

	if(pin > 31){
		pin -= 32;
	}

	EALLOW;
	//Turn off peripheral function
	if(port == PORT_A_2){
		*sel &= ~((uint32_t)0x03 << ((pin-16) * 2));
	}else{
		*sel &= ~((uint32_t)0x03 << (pin * 2));
	}
	*dir &= ~((uint32_t)1 << pin);
	*dir |= ((uint32_t)(mode & 0x01) << pin);

	if(mode == INPUT_PULLUP){
		*pud &= ~((uint32_t)1 << pin);
	}else{
		*pud |= ((uint32_t)1 << pin);
	}

	EDIS;

}
Example #2
0
void pinMode(uint8_t pin, uint8_t mode)
{

    if(pin & 0x8000)
    {

    	EALLOW;
        //Analog Pins
        pin &= 0x7FFF;

        if(mode == HARDWARE)
        {
            //Turn on normal analog functionality
            GpioCtrlRegs.AIOMUX1.all |= 3UL << (pin * 2);
        }
        else
        {
            //Turn on AIO functionality
            GpioCtrlRegs.AIOMUX1.all &= ~( 3UL << (pin * 2));

            if(mode == INPUT)
            {
                GpioCtrlRegs.AIODIR.all &= ~(1UL << pin);
            }
            else if(mode == OUTPUT)
            {
                GpioCtrlRegs.AIODIR.all |= (1UL << pin);
            }

        }
        EDIS;

    }
    else
    {
        //Digital Pins
	    volatile uint32_t *dir;
	    volatile uint32_t *sel;
	    volatile uint32_t *pud;
	    uint8_t port = digitalPinToPort(pin);
	    dir = portDirRegister(port);
	    sel = portSelRegister(port);
    	pud = portPullupRegister(port);

	    if (port == NOT_A_PORT) return;

    	if(pin > 31){
    		pin -= 32;
    	}

    	EALLOW;
    	//Turn off peripheral function
    	if(port == PORT_A_2){
    		*sel &= ~((uint32_t)0x03 << ((pin-16) * 2));
    	}else{
    		*sel &= ~((uint32_t)0x03 << (pin * 2));
    	}
    	*dir &= ~((uint32_t)1 << pin);
    	*dir |= ((uint32_t)(mode & 0x01) << pin);

    	if(mode == INPUT_PULLUP){
    		*pud &= ~((uint32_t)1 << pin);
    	}else{
    		*pud |= ((uint32_t)1 << pin);
    	}

    	EDIS;
    }

}
Example #3
0
void pinMode(uint8_t pin, uint8_t mode)
{
    uint16_t gpio_number = pin_mapping[pin];

    if(gpio_number & 0x8000)
    {

    	EALLOW;
        //Analog Pins
#ifdef TMS320F28377S
    	AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    	AdcaRegs.ADCCTL2.bit.SIGNALMODE = 0; //single-ended
    	AdcaRegs.ADCCTL2.bit.RESOLUTION = 0; //12-bit
    	AdcaRegs.ADCSOC0CTL.bit.CHSEL = gpio_number & 0xF;
#else
        gpio_number &= 0x7FFF;

        if(mode == HARDWARE)
        {
            //Turn on normal analog functionality
            GpioCtrlRegs.AIOMUX1.all |= 3UL << (gpio_number * 2);
        }
        else
        {
            //Turn on AIO functionality
            GpioCtrlRegs.AIOMUX1.all &= ~( 3UL << (gpio_number * 2));

            if(mode == INPUT)
            {
                GpioCtrlRegs.AIODIR.all &= ~(1UL << gpio_number);
            }
            else if(mode == OUTPUT)
            {
                GpioCtrlRegs.AIODIR.all |= (1UL << gpio_number);
            }

        }
#endif
        EDIS;

    }
    else
    {
        //Digital Pins
	    volatile uint32_t *dir;
	    volatile uint32_t *sel;
	    volatile uint32_t *pud;
	    uint8_t port = digitalPinToPort(gpio_number);
	    dir = portDirRegister(port);
	    sel = portSelRegister(port);
    	pud = portPullupRegister(port);

	    if (port == NOT_A_PORT) return;

	    gpio_number %= 32; //limits gpio_number to 32 bits

    	EALLOW;
    	//Turn off peripheral function
    	if(port == PORT_A_2)
    	{
    		*sel &= ~((uint32_t)0x03 << ((gpio_number-16) * 2));
    	}
    	else
    	{
    		*sel &= ~((uint32_t)0x03 << (gpio_number * 2));
    	}
    	*dir &= ~((uint32_t)1 << gpio_number);
    	*dir |= ((uint32_t)(mode & 0x01) << gpio_number);

    	if(mode == INPUT_PULLUP)
    	{
    		*pud &= ~((uint32_t)1 << gpio_number);
    	}
    	else
    	{
    		*pud |= ((uint32_t)1 << gpio_number);
    	}

    	EDIS;
    }

}