You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
4.5 KiB
Markdown

# 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`