##// END OF EJS Templates
Disabled most dead code + set CMake min Ver to 3.5
Disabled most dead code + set CMake min Ver to 3.5

File last commit:

r199:6628458d4fb0 R3
r402:eb452cd0caf8 R3++
Show More
main.c
72 lines | 1.6 KiB | text/x-c | CLexer
paul
fifo occupation reported in the HK packet
r197 #include <stdio.h>
#include "grspw.h"
#include "fsw_params.h"
#define DSU_TIME_TAG_COUNTER 0x90000008
//**********
// IRQ LINES
#define IRQ_GRSPW 11
#define IRQ_SPARC_GRSPW 0x1b // see sparcv8.pdf p.76 for interrupt levels
extern void *catch_interrupt(void func(), int irq);
int *lreg = (int *) 0x80000000;
#define ICLEAR 0x20c
#define IMASK 0x240
#define IFORCE 0x208
void enable_irq (int irq)
{
lreg[ICLEAR/4] = (1 << irq); // clear any pending irq
lreg[IMASK/4] |= (1 << irq); // unmaks irq
}
void disable_irq (int irq) { lreg[IMASK/4] &= ~(1 << irq); } // mask irq
void force_irq (int irq) { lreg[IFORCE/4] = (1 << irq); } // force irq
/* NOTE: NEVER put printf() or other stdio routines in interrupt handlers,
they are not re-entrant. This (bad) example is just a demo */
paul
rev 3.0.0.0
r198 volatile unsigned char processTimecode = 0;
unsigned int counter = 0;
paul
fifo occupation reported in the HK packet
r197
void irqhandler(int irq)
{
processTimecode = 1;
paul
rev 3.0.0.0
r198 counter ++;
paul
fifo occupation reported in the HK packet
r197 }
int main( void )
{
unsigned int *grspwCtrlReg;
unsigned int k;
volatile unsigned int *reg;
float aux;
printf("hello world!\n");
grspwCtrlReg = (unsigned int*) REGS_ADDR_GRSPW;
grspw_set_ie( 1, grspwCtrlReg );
grspw_set_tq( 1, grspwCtrlReg );
grspw_set_tr( 1, grspwCtrlReg );
catch_interrupt(irqhandler, IRQ_GRSPW);
enable_irq( IRQ_GRSPW );
force_irq( IRQ_GRSPW );
reg = (volatile unsigned int *) DSU_TIME_TAG_COUNTER;
while(1)
{
paul
Major bug corrected on the handling of TC_LFR_LOAD_COMMON_PAR
r199 if (processTimecode == 1)
{
printf("timecode counter = %d\n", counter);
processTimecode = 0;
}
paul
fifo occupation reported in the HK packet
r197 }
return 0;
}