This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Problem running LED routine
- From: leslie <egeus at rocketmail dot com>
- To: ecos-discuss at sources dot redhat dot com
- Date: Sun, 5 Dec 2004 19:30:43 -0800 (PST)
- Subject: [ECOS] 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