Moderadores: 51, guest2003, Renie, gpenga
verd escreveu:stig esqueci de comentar, é display alfa-numérico!! tenho que enviar 16 bits para ele!!
static void p_display_isr (void) __irq
{
static U8 u8_display_idx = 0;
// Clear Flag
T0IR = 1;
// Apague o display
M_PORT_DSP_ALL_OFF;
M_PORT_SEG_ALL_OFF;
M_PORT_SEG_ON(u8_display_espelho[u8_display_idx]);
M_PORT_DSP_ON(u8_display_idx);
if ( ++u8_display_idx == sizeof(u8_display_ptr_espelho) )
{
u8_display_idx = 0;
}
//Dummy
VICVectAddr = 0x00000000;
}
#include <LPC213x.H>
#include "Timer.h"
#define CPU_CLOCK 60000000
#define DATA_FREQ 1920
#define VPB_CLOCK ( CPU_CLOCK / 1 )
#define TIM_TICK ( VPB_CLOCK / DATA_FREQ )
void vConfiguraTimer(void)
{
T0MR0 = TIM_TICK - 1;
T0MCR = 3;
T0TCR = 1;
VICVectAddr4 = (unsigned long) irq_vTimer;
VICVectPriority4 = 8;
VICIntEnable |= (1 << 4);
}
__irq void irq_vTimer(void)
{
IOSET1=0XFFFFFFFF; // TESTE PARA SETAR AS PORTAS P1. PARA VER SE ESTÁ OCORRENDO A INTERRRUPÇÃO
T0IR = 1;
VICVectAddr = 0;
}
// Macros
#define M_PORT_SEG_OUT (IODIR |= GPIO_ALL_SEG)
#define M_PORT_SEG_ALL_OFF (IOSET = GPIO_ALL_SEG)
#define M_PORT_DSP_OUT (IODIR |= GPIO_ALL_DSP)
#define M_PORT_DSP_ALL_OFF (IOSET = GPIO_ALL_DSP)
#define M_PORT_DSP_ON(x) (IOCLR = (1U<<(x+GPIO_DSP_BASE)))
#define M_PORT_LED_ON(x) (IOCLR = ((x&0x7F)<<GPIO_LED_BASE))
#define M_PORT_SEG_ON(x) (IOCLR = ((u8_const_hex_to_7seg[x-' '])<<GPIO_SEG_BASE))
// Interrupt
#define XTAL 12E6L
#define M 6L
#define P 2L
#define CPUCLK (XTAL*M)
#define XCLKDIV (CPUCLK/4)
#define DSP_FREQ_VAR (12*100) // 100Hz por cada display
#define DSP_FREQ_INT (XCLKDIV/DSP_FREQ_VAR)
#define DSP_VIC_BIT (4)
#define DSP_VIC_ENABLE_INT ((1<<5)|(DSP_VIC_BIT))
#define DSP_VIC_BIT_INT (1<<DSP_VIC_BIT)
/************************************************************************
FUNCAO: p_display_init
PARAMETROS: NENHUM
RETORNO: NENHUM
DESCRICAO: INICIALIZA AS DEFINIÇÕES DO DISPLAY 7 SEGMENTOS
*************************************************************************/
void p_display_init (void)
{
M_PORT_SEG_OUT;
M_PORT_DSP_OUT;
// Desliga as portas
p_display_off();
memset(&u8_display_espelho, ' ', sizeof(u8_display_espelho));
// Define a função da interrupção
VICVectAddr0 = (U32) p_display_isr;
VICVectCntl0 = DSP_VIC_ENABLE_INT;
VICIntEnable = DSP_VIC_BIT_INT;
T0MCR = 0x00000003;
T0MR0 = DSP_FREQ_INT;
// Enable timer 0
p_display_on();
}
/************************************************************************
FUNCAO: p_display_off
PARAMETROS: NENHUM
RETORNO: NENHUM
DESCRICAO: DESLIGA A INT E DESLIGA O DISPLAY
*************************************************************************/
void p_display_off (void)
{
// Disable timer 0
T0TCR &= ~0x00000001;
// Garanta o nível das portas
M_PORT_SEG_ALL_OFF;
M_PORT_DSP_ALL_OFF;
}
/************************************************************************
FUNCAO: p_display_on
PARAMETROS: NENHUM
RETORNO: NENHUM
DESCRICAO: LIGA A INT DO DISPLAY
*************************************************************************/
void p_display_on (void)
{
// Enable timer 0
T0TCR |= 0x00000001;
}
static char u8_display_espelho[3];
void main (void)
{
M_PORT_SEG_OUT;
M_PORT_DSP_OUT;
// Garanta o nível das portas
M_PORT_SEG_ALL_OFF;
M_PORT_DSP_ALL_OFF;
strcpy(u8_display_espelho, "123");
// Define a função da interrupção
VICVectAddr0 = (U32) p_display_isr;
VICVectCntl0 = DSP_VIC_ENABLE_INT;
VICIntEnable = DSP_VIC_BIT_INT;
T0MCR = 0x00000003;
T0MR0 = DSP_FREQ_INT;
// Enable timer 0
T0TCR |= 0x00000001;
// forever
while(1);
}
void p_display_isr (void) __irq
{
static U8 u8_display_idx = 0;
// Clear Flag
T0IR = 1;
// Apague o display
M_PORT_DSP_ALL_OFF;
M_PORT_SEG_ALL_OFF;
M_PORT_DSP_ON(u8_display_idx);
M_PORT_SEG_ON(u8_display_espelho[u8_display_idx]);
if ( ++u8_display_idx == sizeof(u8_display_espelho) )
{
u8_display_idx = 0;
}
//Dummy
VICVectAddr = 0x00000000;
}
verd escreveu:barboza mudei a diretiva do projeto!! vou fazer utilizando rtos, a idéia é futuramente utilizar UML para organizar o desenvolvimento dos projetos!!
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante