# Creating a dual CPU project - Open a new folder; not workspace - Import project from `C2000Ware_26_01_00_00`: `driverlib/f2837xd/examples/dual/empty_projects/css` - Change project names - `gpio_bitfield_cpu1` - `gpio_driverlib_cpu2` - Change the `.c` files also - Driverlib project does not require changes for compiling - Bitfield project needs some additional compilation variables - Path type var named `C2000_Common` point to `/Users/gmarx/ti/C2000Ware_26_01_00_00/device_support/f2837xd/common/include` - Path type var named `C2000_Headers` pointing to `/Users/gmarx/ti/C2000Ware_26_01_00_00/device_support/f2837xd/headers/include` - Also at `C2000 Compiler` and `Include Options` we should add the previous created vars as: - `${C2000_Common}` - `${C2000_HEaders}` - Additionally at `C2000 Compiler` and `Predefined Symbols` add the entry: - `_DUAL_HEADERS` - Additional source files must be added from `/Users/gmarx/ti/C2000Ware_26_00_00_00/device_support/f2837xd/common/source`: - `F2837xD_SysCtrl.c` - `F2837xD_usDelay.asm` - Adding the file `F2837xD_GlobalVariableDefs.c`-data structure to map all peripherals- that is at `/Users/gmarx/ti/C2000Ware_26_00_00_00/device_support/f2837xd/headers/source/F2837xD_GlobalVariableDefs.c` - Adding the GPIO file ... - One last file must be included the `F2837xD_Headers_nonBIOS_cpu1.cmd` from the path `/Users/gmarx/ti/C2000Ware_26_00_00_00/device_support/f2837xd/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd` **we are using the nonBIOS option because the code will run in debug mode** - However, the CPU2 has an issue at the `Predefined symbols`, we must change the name `CPU1` to `CPU2` # GPIOs example ## CPU1 - Bitfield ```c /* Example project to handle GPIOs from both CPUs using bitfield and driverlib approaches, respectively on each CPU. ------------- CPU1: GPIO22 and GPIO97 using bitfield CPU2: GPIO52 using driverlib */ // Included Files #include "driverlib.h" #include "device.h" #include "F28x_Project.h" // Main void main(void) { // 1: init system InitSysCtrl(); // 2: configure gpios EALLOW; //2.1: GPIO22: GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0; // pin as gpio GpioCtrlRegs.GPADIR.bit.GPIO22 = 1; // configured as output GpioCtrlRegs.GPACSEL3.bit.GPIO22 = 0; // cpu1 by default //2.2: GPIO52: GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 0; // pin as gpio GpioCtrlRegs.GPBDIR.bit.GPIO52 = 1; // as output GpioCtrlRegs.GPBCSEL3.bit.GPIO52 = 2; //cpu2 //2.3 GPIO 97: GpioCtrlRegs.GPDGMUX1.bit.GPIO97 = 0; // pin as gpio GpioCtrlRegs.GPDDIR.bit.GPIO97 = 1; // output EDIS; // 3: Change the gpios state // 3.1: gpioo22: GpioDataRegs.GPASET.bit.GPIO22 = 1; // set a logic 1 in the output // 3.2: gpio97: GpioDataRegs.GPDSET.bit.GPIO97 = 1; // set a logic 1 in the output // 4: Infinite loop } // End of file ``` ## CPU2 - driverlib The main code is: ```c /*Gerardo Marx 16th July 2026 GPIOs management with dual CPUs ---------------- CPU1: GPIO22 and GPIO97 using bitfield approach CPU2: GPIO52 using driverlib approach |-----------| | | |GPIO22 | | | | ---- | |GPIO97 | | | |GPIO52 | |-----------| */ // Libraries and includes #include "driverlib.h" #include "device.h" void main(void){ // 1: init uc does not required for CPU2 // 2: config gpios //GPIO_setPadConfig(52, GPIO_PIN_TYPE_STD); //GPIO_setDirectionMode(52, GPIO_DIR_MODE_OUT); //GPIO_setControllerCore() // 3: change state GPIO_writePin(52, 1); // 4: finite loop for(;;) { // control task } } ``` Pin type at `gpio.h` file ```c //***************************************************************************** // // Values that can be passed to GPIO_setPadConfig() as the pinType parameter // and returned by GPIO_getPadConfig(). // //***************************************************************************** #define GPIO_PIN_TYPE_STD 0x0000U //!< Push-pull output or floating input #define GPIO_PIN_TYPE_PULLUP 0x0001U //!< Pull-up enable for input #define GPIO_PIN_TYPE_INVERT 0x0002U //!< Invert polarity on input #define GPIO_PIN_TYPE_OD 0x0004U //!< Open-drain on output #endif ``` Files to explore and use with a second approach instead of `GPIO_writePin` you can use`HWREG` function: - `hw_memmap.h` - `hw_gpio.h` Compilation error `GPIO_EnableUnbondedIOPullups` - /Users/gmarx/ti/C2000Ware_26_00_00_00/device_support/f2837xd/common/include/F2837xD_GlobalPrototypes.h - `F2837xD_Gpio.c`