All pastes #48934 Raw Edit

Something

public text v1 · immutable
#48934 ·published 2006-04-10 22:34 UTC
rendered paste body
#include <cyg/kernel/kapi.h>           // kernel
#include <cyg/hal/hal_diag.h>           // diagnostics
#include <cyg/infra/diag.h>           // diag_printf
#include <string.h>

#define NTHREADS 1
#define STACKSIZE ( CYGNUM_HAL_STACK_SIZE_TYPICAL + 4096 )

// Base address for PIOA
unsigned volatile int *pio_addr = 0xFFFF0000;//(unsigned int *) AT91_PIOB;
unsigned volatile int *adc0_addr = 0xFFFB0000;
// Stuff to handle the threads
static cyg_handle_t thread[NTHREADS];
static cyg_thread thread_obj[NTHREADS];
static char stack[NTHREADS][STACKSIZE];

static cyg_handle_t rtc;
static cyg_handle_t cnt_handle;
static cyg_handle_t alarm_handle;
static cyg_alarm alarm_obj;

unsigned int wd_flag = 0;

void wd_check_in()
{
	wd_flag = 1;
}

void wd_handler(cyg_handle_t handle,cyg_addrword_t data)
{
	unsigned int *flag = (unsigned int *) data;

	if ((*flag) == 1) {
		(*flag) = 0;
	} else {
		cyg_interrupt_disable();
		diag_printf("Watchdog expired\n");
		diag_printf("Watchdog printed the log\n");
		diag_printf("Watchdog will now loop forever\n");
		while(1);
	}
}


void init_wd_clock(void)
{
	rtc = cyg_real_time_clock();
	cyg_clock_to_counter(rtc,&cnt_handle);
	cyg_alarm_create(cnt_handle,wd_handler,(cyg_addrword_t) &wd_flag,
		&alarm_handle,&alarm_obj);
	// delay for 5 seconds
	cyg_alarm_initialize(alarm_handle,cyg_current_time()+500,500);
}

void loop(void)
{
	int value;
	while(1)
	{
		cyg_thread_delay(100);   //delay 1 second	
		adc0_addr[0x00] = 0x02;  //begin conversion
		diag_printf("Waiting...\n");
		while(1)
		{
			diag_printf("V: %x\n",(adc0_addr[0x20]));// & 0x2)); 	
			if((adc0_addr[0x20] & 0x2) == 0x2)
				break;
		}
		value = adc0_addr[0x34];
		diag_printf("Value: %d\n",value);
	}
}

//temperature sensor is on ADC Channel 1 <ADC 0, channel 1>
void cyg_user_start(void)
{
	int checker;
	//adc0_addr[0x04] = 0x00003f10; //no hardware triggering, no sleep mode, 8-bit operation, PS = 63
	adc0_addr[0x10] = 0x00000007; //enable channel 1
	adc0_addr[0x28] = 0xf;
	cyg_thread_create(4, loop, NULL, "Loop",
		(void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]);
	cyg_thread_resume(thread[0]);
}