This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Question about using the DIP switches on LCDK

Other Parts Discussed in Thread: OMAP-L138, OMAPL138

Hi,

I am using the libraries provided by the book "Digital Signal Processing and Applications with the OMAP-L138 eXperimenter" for a adaptive noise cancellation project. I want to use DIP switch example in the book, to use the dip switch to select different processing modes. However, after I debugged the example in the book and ran the program, it complained <error initializing dip switches> and <Can't find a source file at "/tmp/TI_MKLIB429RQi/SRC/exit.c" Locate the file or edit the source lookup path to include its location>. Anyone knows what is the problem? Can you provide a simple way to utilize the dip switches on LCDK, or any other on-board interfaces that can be used to control the execution of the programs? Our project is nearly due, so I really appreciate if there is an effective and quick solution for it. Thank you.

  • Hi Zhexin,

    <Can't find a source file at "/tmp/TI_MKLIB429RQi/SRC/exit.c" Locate the file or edit the source lookup path to include its location>. Anyone knows what is the problem?

    You can ignore this message.

    It will display this message when the program execution get completed ie "return 0"

    You can use "while(1)" instead "return 0"

    Use the below code for LCDK DIP switch programming and LEDs.

    /**
    * \file    gpio_switches_leds.c
    *
    * \brief   This is a sample application file demonstrating the use of
    *          a GPIO pin for input and output
    *
    *
    * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ 
    *
    *  Redistribution and use in source and binary forms, with or without 
    *  modification, are permitted provided that the following conditions 
    *  are met:
    *
    *    Redistributions of source code must retain the above copyright 
    *    notice, this list of conditions and the following disclaimer.
    *
    *    Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in the 
    *    documentation and/or other materials provided with the   
    *    distribution.
    *
    *    Neither the name of Texas Instruments Incorporated nor the names of
    *    its contributors may be used to endorse or promote products derived
    *    from this software without specific prior written permission.
    *
    *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    */
    
    #include<stdio.h>
    
    #include "gpio.h"
    #include "psc.h"
    
    #include "soc_OMAPL138.h"
    #include "lcdkOMAPL138.h"
    
    /* HW Macros */
    #include "hw_types.h"
    
    /* System Defines */
    #include "lcdkOMAPL138.h"
    #include "soc_OMAPL138.h"
    #include "hw_syscfg0_OMAPL138.h"
    
    
    
    /* Switch Configuration */
    
    /* Titus : GP0[1] to GP0[4] is mapped to SW1[3:4] on OMAPL138/C6748 LCDK boards */
    
    /* Pin Multiplexing bit mask to select GP0[1] to GP0[4] pin. */
    
    #define PINMUX1_GPIO0_1_ENABLE    (SYSCFG_PINMUX1_PINMUX1_27_24_GPIO0_1  << \
                                        SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT)
    
    #define PINMUX1_GPIO0_2_ENABLE    (SYSCFG_PINMUX1_PINMUX1_23_20_GPIO0_2  << \
                                        SYSCFG_PINMUX1_PINMUX1_23_20_SHIFT)
    
    #define PINMUX1_GPIO0_3_ENABLE    (SYSCFG_PINMUX1_PINMUX1_19_16_GPIO0_3  << \
                                        SYSCFG_PINMUX1_PINMUX1_19_16_SHIFT)
    
    #define PINMUX1_GPIO0_4_ENABLE    (SYSCFG_PINMUX1_PINMUX1_15_12_GPIO0_4  << \
                                        SYSCFG_PINMUX1_PINMUX1_15_12_SHIFT)
    
    
    /* LED Configuration */
    
    /* Titus : GP6[12], GP6[13], GP2[12] and GP0[9] is mapped to D4, D5, D6, D7 LEDs on OMAPL138/C6748 LCDK boards */
    
    /* Pin Multiplexing bit mask to select GP6[12] pin. */
    #define PINMUX13_GPIO6_12_ENABLE    (SYSCFG_PINMUX13_PINMUX13_15_12_GPIO6_12  << \
                                        SYSCFG_PINMUX13_PINMUX13_15_12_SHIFT)
    
    /* Pin Multiplexing bit mask to select GP6[13] pin. */
    #define PINMUX13_GPIO6_13_ENABLE    (SYSCFG_PINMUX13_PINMUX13_11_8_GPIO6_13  << \
                                        SYSCFG_PINMUX13_PINMUX13_11_8_SHIFT)
    
    /* Pin Multiplexing bit mask to select GP2[12] pin. */
    #define PINMUX5_GPIO2_12_ENABLE    (SYSCFG_PINMUX5_PINMUX5_15_12_GPIO2_12  << \
                                        SYSCFG_PINMUX5_PINMUX5_15_12_SHIFT)
    
    /* Pin Multiplexing bit mask to select GP0[9] pin. */
    #define PINMUX0_GPIO0_9_ENABLE    (SYSCFG_PINMUX0_PINMUX0_27_24_GPIO0_9  << \
                                        SYSCFG_PINMUX0_PINMUX0_27_24_SHIFT)
    
    
    void PinMuxSetup_leds(void)
    {
         unsigned int savePinmux = 0;
    
    
         /*
         ** Clearing the bit in context and retaining the other bit values
         ** in PINMUX13 register.
         */
         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) &
                      ~(SYSCFG_PINMUX13_PINMUX13_15_12));
    
         /* Setting the pins corresponding to GP6[12] in PINMUX13 register.*/
         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) =
              (PINMUX13_GPIO6_12_ENABLE | savePinmux);
    
    
         /*
         ** Clearing the bit in context and retaining the other bit values
         ** in PINMUX13 register.
         */
         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) &
                      ~(SYSCFG_PINMUX13_PINMUX13_11_8));
    
         /* Setting the pins corresponding to GP6[13] in PINMUX13 register.*/
         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) =
              (PINMUX13_GPIO6_13_ENABLE | savePinmux);
    
    
         /*
         ** Clearing the bit in context and retaining the other bit values
         ** in PINMUX5 register.
         */
         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) &
                      ~(SYSCFG_PINMUX5_PINMUX5_15_12));
    
         /* Setting the pins corresponding to GP2[12] in PINMUX5 register.*/
         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) =
              (PINMUX5_GPIO2_12_ENABLE | savePinmux);
    
    
         /*
         ** Clearing the bit in context and retaining the other bit values
         ** in PINMUX0 register.
         */
         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) &
                      ~(SYSCFG_PINMUX0_PINMUX0_27_24));
    
         /* Setting the pins corresponding to GP0[9] in PINMUX0 register.*/
         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) =
              (PINMUX0_GPIO0_9_ENABLE | savePinmux);
    
    }
    
    
    
    void PinMuxSetup_switches(void)
    {
         unsigned int savePinmux = 0;
    
         /* Setting the pins corresponding to GP0[1] in PINMUX1 register.*/
    
         /*
         ** Clearing the bit in context and retaining the other bit values
         ** in PINMUX1 register.
         */
         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
                      ~(SYSCFG_PINMUX1_PINMUX1_27_24));
    
    
         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
              (PINMUX1_GPIO0_1_ENABLE | savePinmux);
    
    
    
         /* Setting the pins corresponding to GP0[2] in PINMUX1 register.*/
    
              /*
              ** Clearing the bit in context and retaining the other bit values
              ** in PINMUX1 register.
              */
              savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
                           ~(SYSCFG_PINMUX1_PINMUX1_23_20));
    
    
              HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
                   (PINMUX1_GPIO0_2_ENABLE | savePinmux);
    
    
    
    
              /* Setting the pins corresponding to GP0[3] in PINMUX1 register.*/
    
                   /*
                   ** Clearing the bit in context and retaining the other bit values
                   ** in PINMUX1 register.
                   */
                   savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
                                ~(SYSCFG_PINMUX1_PINMUX1_19_16));
    
    
                   HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
                        (PINMUX1_GPIO0_3_ENABLE | savePinmux);
    
    
    
                   /* Setting the pins corresponding to GP0[4] in PINMUX1 register.*/
    
                        /*
                        ** Clearing the bit in context and retaining the other bit values
                        ** in PINMUX1 register.
                        */
                        savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
                                     ~(SYSCFG_PINMUX1_PINMUX1_15_12));
    
    
                        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
                             (PINMUX1_GPIO0_4_ENABLE | savePinmux);
    
    
    }
    
    
    int main(void)
    {
    
    
        /* The Local PSC number for GPIO is 3. GPIO belongs to PSC1 module.*/
        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
    		     PSC_MDCTL_NEXT_ENABLE);
    
    
        /* Pin Multiplexing of pins GP0[1] to GP0[4] of GPIO Bank 2 for DIP SWITCHEs in OMAPL138 LCDK board */
        PinMuxSetup_switches();
    
        /* Pin Multiplexing of pins GP6[12], GP6[13], GP2[12], GP0[9], for LEDs in OMAPL138 LCDK board */
        PinMuxSetup_leds();
    
    
        /* Titus : 2,3,4,5 is the GPIO no for GP0[1] to GP0[4]; Refer page no 901 in OMAPL138/C6748 TRM */
    
    
    /* SWITCHEs SETUP */
    
        /* Sets the pin 2 (GP0[1]) as input.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);
    
        /* Sets the pin 3 (GP0[2]) as input.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);
    
        /* Sets the pin 4 (GP0[3]) as input.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 4, GPIO_DIR_INPUT);
    
        /* Sets the pin 5 (GP0[4]) as input.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 5, GPIO_DIR_INPUT);
    
    /* LEDs SETUP */
    
        /* Sets the pin 109 (GP6[12]) as output.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);
    
        /* Sets the pin 110 (GP6[13]) as output.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT);
    
        /* Sets the pin 45 (GP2[12]) as output.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 45, GPIO_DIR_OUTPUT);
    
        /* Sets the pin 10 (GP0[9]) as output.*/
        GPIODirModeSet(SOC_GPIO_0_REGS, 10, GPIO_DIR_OUTPUT);
    
    
        while(1)
        {
    
        /* Titus : 2,3,4,5 is the GPIO no for GP0[1] to GP0[4]; Refer page no 901 in OMAPL138/C6748 TRM */
    
    	    if (GPIOPinRead(SOC_GPIO_0_REGS, 2))
    		{
    
    		GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);
        	printf("S1 is not pressed\n");
    
    		}
    
    	    else
    	    {
    	    	printf("S1 is pressed\n");
    			GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);
    
    	    }
    
    	    if (GPIOPinRead(SOC_GPIO_0_REGS, 3))
    		{
    
    		GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW);
        	printf("S2 is not pressed\n");
    
    		}
    	    else
    	    	    {
    	    	    	printf("S2 is pressed\n");
    	    			GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);
    
    	    	    }
    
    
    	    if (GPIOPinRead(SOC_GPIO_0_REGS, 4))
    		{
    
    		GPIOPinWrite(SOC_GPIO_0_REGS, 45, GPIO_PIN_LOW);
        	printf("S3 is not pressed\n");
    
    		}
    	    else
    	    	    {
    	    	    	printf("S3 is pressed\n");
    	    			GPIOPinWrite(SOC_GPIO_0_REGS, 45, GPIO_PIN_HIGH);
    
    	    	    }
    
    
    	    if (GPIOPinRead(SOC_GPIO_0_REGS, 5))
    		{
    
    		GPIOPinWrite(SOC_GPIO_0_REGS, 10, GPIO_PIN_LOW);
        	printf("S4 is not pressed\n");
    
    
    		}
    	    else
    	    	    {
    	    	    	printf("S4 is pressed\n");
    	    			GPIOPinWrite(SOC_GPIO_0_REGS, 10, GPIO_PIN_HIGH);
    
    	    	    }
    
    
    
        }
    
    
    }
    
  • Hi Titus,

    Can this program be used with interrupt service routine? Are these code compatible with libraries already defined by ohthers? This is a project and we simply want to use the dip switches to control the execution of some programs. Or how to use the user push buttons? Is there a simple way? What are those headers included in this program and where can I find them? Thanks 

  • Also, right now only the MIC right channel of the codec on my LCDK seem to work at 0dB specification. The line input doesn't work totally. Do you know what might be the problem? The codec is damaged? But I am not sure how can you damage the codec.

  • Hi Zhexin,

    You can find the libraries and include files from "C6748 LCDK starterware package".

    Just I gave some example for GPIO with LED and DIP switch configuration so try to understand and modify it for push button switch.

    http://processors.wiki.ti.com/index.php/StarterWare

  • Hi Titus,

    Can you tell me what 

    #define PINMUX1_GPIO0_1_ENABLE (SYSCFG_PINMUX1_PINMUX1_27_24_GPIO0_1 << \
    SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT)

    is doing? What is pin multiplexing bit mask? What are GP0[1]~GP0[4] stand for? What is SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT?

    Thanks

  • Hi Zhexin,

    I've clearly mentioned through comments in every line of code.

    In CCS, click [control] key + that API line then you would direct to correct declaration file (include)

    SYSCFG_PINMUX1_PINMUX1_27_24_GPIO0_1  -> selecting the GPIO (0x8)
    SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT  -> Place in pinmux register

    You have to understand the GPIO registers and pinmuxing concept.

    Please refer to the C6748/OMAPL138 TRM for SYSCFG module.

    http://www.ti.com/lit/ug/spruh79a/spruh79a.pdf

    Refer chapter 10 and page no 225 ie PINMUX1 register.