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.

How to create a SYS/BIOS project to blink LED on Beaglebone Black ?

Other Parts Discussed in Thread: AM3358

I am new to SYS/BIOS and Beaglebone Black. Recently, I want to create a SYS/BIOS project which run on my Beaglebone Black. So my target is to create a task in SYS/BIOS to blink the LED. I noticed that there is a gpioLEDBlink project in the starterware and there is a mutitask project in the resource explorer about SYS/BIOS. So my idea is to combine such two projects. But I have encountered many problems. What I have done is as following.
1. I imported the Hello Example from the TI Resource Explorer.

2. I have changed the .c file, which is shown below.

#include <xdc/std.h>
#include <xdc/runtime/System.h>

#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Semaphore.h>

#include <xdc/cfg/global.h>

#include "soc_AM335x.h"
#include "beaglebone.h"
#include "gpio_v2.h"

/*****************************************************************************
**                INTERNAL MACRO DEFINITIONS
*****************************************************************************/
#define GPIO_INSTANCE_ADDRESS           (SOC_GPIO_1_REGS)
#define GPIO_INSTANCE_PIN_NUMBER        (23)

/*****************************************************************************
**                INTERNAL FUNCTION PROTOTYPES
*****************************************************************************/
static void Delay(unsigned int count);

/*****************************************************************************
**                INTERNAL FUNCTION PROTOTYPES
*****************************************************************************/
void taskLedBlink(UArg arg0, UArg arg1)
{
    /* Enabling functional clocks for GPIO1 instance. */
    GPIO1ModuleClkConfig();

    /* Selecting GPIO1[23] pin for use. */
    GPIO1Pin23PinMuxSetup();

    /* Enabling the GPIO module. */
    GPIOModuleEnable(GPIO_INSTANCE_ADDRESS);

    /* Resetting the GPIO module. */
    GPIOModuleReset(GPIO_INSTANCE_ADDRESS);

    /* Setting the GPIO pin as an output pin. */
    GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
                   GPIO_INSTANCE_PIN_NUMBER,
                   GPIO_DIR_OUTPUT);
    while(1)
    {
        /* Driving a logic HIGH on the GPIO pin. */
        GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
                     GPIO_INSTANCE_PIN_NUMBER,
                     GPIO_PIN_HIGH);

        Delay(0x3FFFF);

        /* Driving a logic LOW on the GPIO pin. */
        GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
                     GPIO_INSTANCE_PIN_NUMBER,
                     GPIO_PIN_LOW);

        Delay(0x3FFFF);
    }

}

/*
 *  ======== main ========
 */
Int main()
{ 
// BIOS task setup Task_Params taskParams; Task_Params_init(&taskParams); taskParams.priority = 1; Task_create (taskLedBlink, &taskParams, NULL); // taskLedBlink BIOS_start(); return(0); } /* ** A function which is used to generate a delay. */ static void Delay(volatile unsigned int count) { while(count--); } /******************************* End of file *********************************/

3. I have included some necessary header file.

4. I have added some libraries.

5. I added post-build commmand

"${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${ProjName}.out" "${ProjName}.bin" 
"${CG_TOOL_ROOT}/bin/armofd.exe" "${CG_TOOL_ROOT}/bin/armhex.exe" 
"${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe" & "${IA_SDK_HOME}\starterware\tools\ti_image\tiimage.exe" 
"0x80000000" "NONE" "${ProjName}.bin" "${ProjName}_ti.bin"

6. I referred to e2e.ti.com/.../312951 and add the following code to the end of the .cfg file.

var Mmu = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');
Mmu.enableMMU = true;

/* Force peripheral section to be NON cacheable */
var peripheralAttrs = {
    type : Mmu.FirstLevelDesc_SECTION, /* SECTION descriptor */
    bufferable : false,
    cacheable  : false,
    shareable  : false,
    noexecute  : true,
};

/* Define the base addresses in which the peripherals reside. */
/* Clock Module, GPIO0, UART0, I2C0 */
var peripheral0BaseAddr = 0x44E00000
/* GPIO1, UART1, UART2, I2C1, McSPI0, McASP0 CFG, McASP1 CFG */
var peripheral1BaseAddr = 0x48000000
/* GPIO2, GPIO3, UART3, UART4, UART5, I2C2, McSPI1 */
var peripheral2BaseAddr = 0x48100000

/* Configure the corresponding MMU page descriptor */
Mmu.setFirstLevelDescMeta(peripheral0BaseAddr, peripheral0BaseAddr, peripheralAttrs);
Mmu.setFirstLevelDescMeta(peripheral1BaseAddr, peripheral1BaseAddr, peripheralAttrs);
Mmu.setFirstLevelDescMeta(peripheral2BaseAddr, peripheral2BaseAddr, peripheralAttrs);

After building such project, I got the _ti.bin file. I renamed it as "app", then copied it to the SD card with Beaglebone Black bootloader(MLO). When board booted, I cannot see the LED to blink, the UART information stop at "Jumping to the application...".

Then I tried to modified the .c file as below.

#include <xdc/std.h>
#include <xdc/runtime/System.h>

#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Semaphore.h>

#include <xdc/cfg/global.h>

#include "soc_AM335x.h"
#include "beaglebone.h"
#include "gpio_v2.h"

/*****************************************************************************
**                INTERNAL MACRO DEFINITIONS
*****************************************************************************/
#define GPIO_INSTANCE_ADDRESS           (SOC_GPIO_1_REGS)
#define GPIO_INSTANCE_PIN_NUMBER        (23)

/*
 *  ======== main ========
 */
Int main()
{ 
    /* Enabling functional clocks for GPIO1 instance. */
    GPIO1ModuleClkConfig();

    /* Selecting GPIO1[23] pin for use. */
    GPIO1Pin23PinMuxSetup();

    /* Enabling the GPIO module. */
    GPIOModuleEnable(GPIO_INSTANCE_ADDRESS);

    /* Resetting the GPIO module. */
    GPIOModuleReset(GPIO_INSTANCE_ADDRESS);

    /* Setting the GPIO pin as an output pin. */
    GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
                   GPIO_INSTANCE_PIN_NUMBER,
                   GPIO_DIR_OUTPUT);
    /* Driving a logic HIGH on the GPIO pin. */
    GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
                 GPIO_INSTANCE_PIN_NUMBER,
                 GPIO_PIN_HIGH);

    // BIOS task setup
    BIOS_start();

    return(0);
}

/******************************* End of file *********************************/

Things didn't change, I cannot see the LED to be lighted, and the UART information stoped at "Jumping to the aplication".

Actually, I have no idea about it at all. Could someone please help me ? Is there any instruction or blog about it ? Or is there any project resource that I can get ?