This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Problem running LED routine


Hello,

I wrote a program to test the LEDs and the 7-Segment on my board which
is similar to the ARME7T. Attached below is my code. My board is
running on RedBoot. When I download the binary program into the board
at address 0x17000. After loading I type "go 0x17000" to run, it gives
me the following line "$T050f:680b0100;0d:ec7f0400;". 

What could be the problem? Thanks in advance.

Code listing:
#include <led_test.h>
#include <stdio.h>

// Local Settings
#define LED_MASK 0x0003D;
#define nLED_MASK ~LED_MASK;
#define G1LED_MASK 0x00001;
#define OLED_MASK 0x00004;
#define RLED_MASK 0x00008;
#define G2LED_MASK 0x00020;
#define BLED_MASK 0x00020;
#define nG1LED_MASK ~G1LED_MASK;
#define nOLED_MASK ~OLED_MASK;
#define nRLED_MASK ~RLED_MASK;
#define nG2LED_MASK ~G2LED_MASK;
#define nBLED_MASK ~BLED_MASK;
#define SEG_MASK 0x08000;
#define nSEG_MASK ~SEG_MASK;
#define SEG_EN_MASK 0x08000;
#define nSEG_EN_MASK ~SEG_EN_MASK;
#define SEG_DXN_MASK 0x02000;
#define nSEG_DXN_MASK ~SEG_DXN_MASK;
#define SEG_CLK_MASK 0x04000;
#define nSEG_CLK_MASK ~SEG_CLK_MASK;
#define DIP_MASK 0x01E00;
#define nDIP_MASK ~DIP_MASK;
#define FOURLED_MASK 0x0003C;
#define nFOURLED_MASK ~FOURLED_MASK;
#define DIP1_MASK 0x01000;
#define nDIP1_MASK ~DIP_MASK;

void initialise_led_n_seg(void);
void lightGreen1LED(void);
void segDisplayCE(void);
void setSegmentConfig(void);
void setSegDisRegCommon(void);
void segDXnHigh(void);
void segDXnLow(void);
void segCLKLow(void);
void segCLKHigh(void);
void segENHigh(void);
void segENLow(void);

int main(void)
{
initialise_led_n_seg();
return 0;
}

void initialise_led_n_seg(void)
{

//Place SYSTEM register to address 0x3ff00000 and disable both cache
and write-buffer on microcontroller

HAL_WRITE_UINT32(E7T_SYSCFG, 0x07FFFFA0);

//Initialize hardware to use segment display

cyg_uint32 sm;
HAL_READ_UINT32(E7T_IOPMOD,sm);
sm |= SEG_MASK;
HAL_WRITE_UINT32(E7T_IOPMOD,sm);

//Configure IO Port Mode Register for LED
cyg_uint32 ledmod;
HAL_READ_UINT32(E7T_IOPMOD,ledmod);
ledmod |= LED_MASK;
HAL_WRITE_UINT32(E7T_IOPMOD,ledmod);

//Configure IO Port Mode Register for DIP Switch
cyg_uint32 dipmod;
HAL_READ_UINT32(E7T_IOPMOD,dipmod);
dipmod &= nDIP_MASK;
HAL_WRITE_UINT32(E7T_IOPMOD,dipmod);

//Light up GREEN 1 LED
lightGreen1LED();

//Display Segment initially with CE
segDisplayCE();

}

void lightGreen1LED(void)
{
cyg_uint32 g1data;
HAL_READ_UINT32(E7T_IOPDATA,g1data);
g1data &= nG1LED_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,g1data);
}

void segDisplayCE(void)
{
setSegmentConfig();
setSegDisRegCommon();

//Data In |D7 to D4 -> "E" = 1101
segDXnHigh();
segDXnHigh();
segDXnHigh();
segDXnLow();

//Data in |D3 to D0 -> "C" = 1100
segDXnHigh();
segDXnHigh();
segDXnLow();
segDXnLow();

//Ends display register config by setting EN=1
segCLKLow();
segENHigh();
}

void setSegmentConfig(void)
{
//Set Seg CLK to 0
segCLKLow();

//Enables Seg Driver by setting Seg EN=0
segENLow();

//Data In |C7 = 0 -> NO Decode for C4 and C5
segDXnLow();

//Data In |C6 = 0 -> NO Decode for C1, C2 and C3
segDXnLow();

//Data In |C5 = 0 -> Bank 5 HEX Decode
segDXnLow();

//Data In |C4 = 0 -> Bank 4 HEX Decode
segDXnLow();

//Data In |C3 = 0 -> Bank 3 HEX Decode
segDXnLow();

//Data In |C2 = 0 -> Bank 2 HEX Decode
segDXnLow();

//Data In |C1 = 0 -> Bank 1 HEX Decode
segDXnLow();

//Data In |C0=1 => Normal Mode
segDXnHigh();

//Ends config register config by setting EN=1
segCLKLow();
segENHigh();
}

void setSegDisRegCommon(void)
{
segCLKLow();
segENLow();
segDXnHigh();
segDXnLow();
segDXnHigh();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
segDXnLow();
}

void segCLKHigh(void)
{
//Set Seg CLK=1
cyg_uint32 segclkmh;
HAL_READ_UINT32(E7T_IOPDATA,segclkmh);
segclkmh |= SEG_CLK_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segclkmh);
}

void segCLKLow(void)
{
//Set Seg CLK=0
cyg_uint32 segclkml;
HAL_READ_UINT32(E7T_IOPDATA,segclkml);
segclkml &= nSEG_CLK_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segclkml);
}

void segENLow(void)
{
//Enable Seg Driver by setting Seg EN=0
cyg_uint32 segenml;
HAL_READ_UINT32(E7T_IOPDATA,segenml);
segenml &= nSEG_EN_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segenml);
}

void segENHigh(void)
{
//Disable Seg Driver by setting Seg EN=1
cyg_uint32 segenmh;
HAL_READ_UINT32(E7T_IOPDATA,segenmh);
segenmh |= SEG_EN_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segenmh);
}

void segDXnHigh(void)
{
//Data In = 1 Set Seg Clk=0
cyg_uint32 segdxnh1;
HAL_READ_UINT32(E7T_IOPDATA,segdxnh1);
segdxnh1 &= nSEG_CLK_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segdxnh1);

cyg_uint32 segdxnh2;
HAL_READ_UINT32(E7T_IOPDATA,segdxnh2);
segdxnh2 |= SEG_DXN_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segdxnh2);

HAL_READ_UINT32(E7T_IOPDATA,segdxnh1);
segdxnh1 |= SEG_CLK_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segdxnh1);
}

void segDXnLow(void)
{
//Data In = 0 Set Seg Clk=0
cyg_uint32 segdxnl1;
HAL_READ_UINT32(E7T_IOPDATA,segdxnl1);
segdxnl1 &= nSEG_CLK_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segdxnl1);

cyg_uint32 segdxnl2;
HAL_READ_UINT32(E7T_IOPDATA,segdxnl2);
segdxnl2 &= nSEG_DXN_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segdxnl2);

HAL_READ_UINT32(E7T_IOPDATA,segdxnl1);
segdxnl1 |= SEG_CLK_MASK;
HAL_WRITE_UINT32(E7T_IOPDATA,segdxnl1);
}



		
__________________________________ 
Do you Yahoo!? 
The all-new My Yahoo! - What will yours do?
http://my.yahoo.com 

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]