Ktam3874/pitx software guide – Kontron KTAM3874-pITX User Manual
Page 61

KTD-S0057-I
Page 57 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
int open_reg_range (void)
{
fd = open ("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0)
return
-1;
map_base = mmap (0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
TIMER_BASE
&
~MAP_MASK);
if (map_base == (void *) -1)
return
-1;
virt_addr = map_base + (TIMER_BASE & MAP_MASK);
return
0;
}
void close_reg_range (void)
{
munmap (map_base, MAP_SIZE);
close
(fd);
}
inline unsigned long read_timer_reg (unsigned long reg)
{
return *((unsigned long *) (virt_addr + reg));
}
inline void write_timer_reg (unsigned long reg, unsigned long val)
{
*((unsigned long *) (virt_addr + reg)) = val;
}
int timer_reset (void)
{
int
i;
/* Reset the timer */
write_timer_reg (TSICR, TSICR_SFT | TSICR_POSTED);
for (i = 0; i < RESET_TIMEOUT; i++)
if (! (read_timer_reg (TIOCP_CFG) & TIOCP_SOFTRES)) break;
if (i >= RESET_TIMEOUT)
return
-1;
/* Set to smart-idle mode */
write_timer_reg (TIOCP_CFG, read_timer_reg (TIOCP_CFG) | 0x200 | TIOCP_SMARTIDLE);
/* Match hardware reset default of posted mode */
write_timer_reg (TSICR, TSICR_POSTED);