start modularizing the code
This commit is contained in:
parent
7077bfbd57
commit
b1fcd9fe44
|
|
@ -59,7 +59,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BAUD 9600UL
|
#define BAUD 9600UL
|
||||||
#define UBRRVAL (CPU_FREQ/(BAUD*16)-1)
|
#define UBRRVAL (F_CPU/(BAUD*16)-1)
|
||||||
#define USE_SLEEP 1
|
#define USE_SLEEP 1
|
||||||
|
|
||||||
void uart_init()
|
void uart_init()
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* P8000 WDC Emulator
|
* P8000 WDC Emulator
|
||||||
*
|
*
|
||||||
* $Id: wdc_config.h,v 1.3 2012/05/30 16:41:00 olivleh1 Exp $
|
* $Id: wdc_config.h,v 1.4 2012/05/30 20:07:10 olivleh1 Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#ifndef CONFIG_H_
|
#ifndef CONFIG_H_
|
||||||
#define CONFIG_H_
|
#define CONFIG_H_
|
||||||
|
|
||||||
#define CPU_FREQ 18432000UL
|
#define F_CPU 18432000UL
|
||||||
|
|
||||||
#define PORT_DATA PORTA
|
#define PORT_DATA PORTA
|
||||||
#define PIN_DATA PINA
|
#define PIN_DATA PINA
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,26 @@
|
||||||
/*
|
/*
|
||||||
* P8000 WDC Emulator
|
* P8000 WDC Emulator
|
||||||
*
|
*
|
||||||
* $Id: wdc_main.c,v 1.3 2012/05/30 16:41:00 olivleh1 Exp $
|
* $Id: wdc_main.c,v 1.4 2012/05/30 20:07:10 olivleh1 Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include <avr/sleep.h>
|
#include <avr/sleep.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include "config.h"
|
#include <util/delay.h>
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
void atmega_setup(void);
|
void atmega_setup(void);
|
||||||
|
void wdc_read_data_from_p8k(uint8_t **data_buffer, uint8_t data_count);
|
||||||
|
void wdc_write_data_to_ram(uint8_t **data_buffer, uint16_t data_address, uint8_t data_count);
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
|
@ -25,6 +30,7 @@ int main(void)
|
||||||
uint8_t datacnt;
|
uint8_t datacnt;
|
||||||
uint16_t data_counter;
|
uint16_t data_counter;
|
||||||
uint16_t data_address;
|
uint16_t data_address;
|
||||||
|
uint8_t *data_buffer = NULL;
|
||||||
|
|
||||||
atmega_setup();
|
atmega_setup();
|
||||||
|
|
||||||
|
|
@ -60,38 +66,18 @@ int main(void)
|
||||||
{
|
{
|
||||||
case CMD_WR_WDC_RAM:
|
case CMD_WR_WDC_RAM:
|
||||||
|
|
||||||
for(data_counter=1000;data_counter>0;data_counter--) asm("nop");
|
|
||||||
|
|
||||||
data_counter = (cmdbuffer[7]<<8)|cmdbuffer[6];
|
data_counter = (cmdbuffer[7]<<8)|cmdbuffer[6];
|
||||||
|
|
||||||
configure_port_data_read();
|
wdc_read_data_from_p8k(&data_buffer
|
||||||
datacnt = 0;
|
,data_counter
|
||||||
port_info_set( INFO_STAT_RDATA );
|
);
|
||||||
while ( !isset_info_te() );
|
|
||||||
while ( !isset_info_wdardy() );
|
|
||||||
while ( datacnt < data_counter )
|
|
||||||
{
|
|
||||||
while ( isset_info_wdardy() );
|
|
||||||
port_info_set( INFO_ASTB | INFO_STAT_RDATA );
|
|
||||||
buffer[datacnt] = port_data_get();
|
|
||||||
port_info_set( INFO_STAT_RDATA );
|
|
||||||
while ( !isset_info_wdardy() );
|
|
||||||
|
|
||||||
datacnt++;
|
wdc_write_data_to_ram(&data_buffer
|
||||||
}
|
,convert_ram_address((cmdbuffer[2]<<8)+cmdbuffer[1])
|
||||||
|
,data_counter
|
||||||
|
);
|
||||||
|
|
||||||
port_info_set( INFO_CLEAR );
|
free(data_buffer);
|
||||||
|
|
||||||
data_address = convert_ram_address((cmdbuffer[2]<<8)+cmdbuffer[1]);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
data_counter--;
|
|
||||||
wdc_ram[data_address+data_counter] = buffer[+data_counter];
|
|
||||||
} while (data_counter > 0);
|
|
||||||
|
|
||||||
uart_puts_p(PSTR("DATA Buffer:"));
|
|
||||||
uart_putc_hex(wdc_ram[data_address+0]);
|
|
||||||
uart_putc_hex(wdc_ram[data_address+1]);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_RD_WDC_RAM:
|
case CMD_RD_WDC_RAM:
|
||||||
|
|
@ -104,7 +90,7 @@ int main(void)
|
||||||
buffer[+data_counter] = wdc_ram[data_address+data_counter];
|
buffer[+data_counter] = wdc_ram[data_address+data_counter];
|
||||||
} while (data_counter > 0);
|
} while (data_counter > 0);
|
||||||
|
|
||||||
for(data_counter=1000;data_counter>0;data_counter--) asm("nop");
|
_delay_us(560);
|
||||||
|
|
||||||
data_counter = (cmdbuffer[7]<<8)|cmdbuffer[6];
|
data_counter = (cmdbuffer[7]<<8)|cmdbuffer[6];
|
||||||
datacnt = 0;
|
datacnt = 0;
|
||||||
|
|
@ -131,7 +117,7 @@ int main(void)
|
||||||
port_info_set( INFO_CLEAR );
|
port_info_set( INFO_CLEAR );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
for(data_counter=1000;data_counter>0;data_counter--) asm("nop");
|
_delay_us(560);
|
||||||
port_info_set( INFO_TR | INFO_STAT_ERROR );
|
port_info_set( INFO_TR | INFO_STAT_ERROR );
|
||||||
while ( isset_info_te() );
|
while ( isset_info_te() );
|
||||||
configure_port_data_write();
|
configure_port_data_write();
|
||||||
|
|
@ -152,6 +138,7 @@ int main(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
uart_puts_p(PSTR(" CMD Buffer:"));
|
uart_puts_p(PSTR(" CMD Buffer:"));
|
||||||
uart_putc_hex(cmdbuffer[0]);
|
uart_putc_hex(cmdbuffer[0]);
|
||||||
uart_putc_hex(cmdbuffer[1]);
|
uart_putc_hex(cmdbuffer[1]);
|
||||||
|
|
@ -163,7 +150,7 @@ int main(void)
|
||||||
uart_putc_hex(cmdbuffer[7]);
|
uart_putc_hex(cmdbuffer[7]);
|
||||||
uart_putc_hex(cmdbuffer[8]);
|
uart_putc_hex(cmdbuffer[8]);
|
||||||
uart_putc('\n');
|
uart_putc('\n');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -185,3 +172,38 @@ void atmega_setup(void)
|
||||||
|
|
||||||
uart_init();
|
uart_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wdc_read_data_from_p8k(uint8_t **data_buffer, uint8_t data_count)
|
||||||
|
{
|
||||||
|
int datacnt = 0;
|
||||||
|
|
||||||
|
(*data_buffer) = (uint8_t *)malloc(data_count);
|
||||||
|
|
||||||
|
_delay_us(560);
|
||||||
|
|
||||||
|
configure_port_data_read();
|
||||||
|
port_info_set( INFO_STAT_RDATA );
|
||||||
|
while ( !isset_info_te() );
|
||||||
|
while ( !isset_info_wdardy() );
|
||||||
|
do
|
||||||
|
{
|
||||||
|
while ( isset_info_wdardy() );
|
||||||
|
port_info_set( INFO_ASTB | INFO_STAT_RDATA );
|
||||||
|
(*data_buffer)[datacnt] = port_data_get();
|
||||||
|
port_info_set( INFO_STAT_RDATA );
|
||||||
|
while ( !isset_info_wdardy() );
|
||||||
|
|
||||||
|
datacnt++;
|
||||||
|
} while ( datacnt < data_count );
|
||||||
|
|
||||||
|
port_info_set( INFO_CLEAR );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wdc_write_data_to_ram(uint8_t **data_buffer, uint16_t data_address, uint8_t data_count)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
data_count--;
|
||||||
|
wdc_ram[data_address+data_count] = (*data_buffer)[data_count];
|
||||||
|
} while (data_count > 0);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue