www.diary.ru/~randomfest/p113810036.htm
подглядел у Saito-san
ЗЫ гинтама наше все! m^_^m
в эти выходные.
видео анрилейтед ~^__^~
и какая зараза так разводит выводы?! >_<
я конечно понимаю, что тут этот быдлокод мало кто поймет, но все же налячканный костыль
#define VSC_ASN_ALE ARM_PIN_PA07
#define VSC_CSN ARM_PIN_PA11
#define VSC_ADR00 ARM_PIN_PA22
#define VSC_SDA ARM_PIN_PA23
#define VSC_SCL ARM_PIN_PA24
#define VSC_DT00 ARM_PIN_PA25
#define VSC_ADR01 ARM_PIN_PA26
#define VSC_DT01 ARM_PIN_PA27
#define VSC_ADR02 ARM_PIN_PA28
#define VSC_DT02 ARM_PIN_PA29
#define VSC_ADR03 ARM_PIN_PB00
#define VSC_DT03 ARM_PIN_PB01
#define VSC_DT04 ARM_PIN_PB02
#define VSC_DT11 ARM_PIN_PB04
#define VSC_DT12 ARM_PIN_PB05
#define VSC_DT13 ARM_PIN_PB07
#define VSC_DT15 ARM_PIN_PB09
#define VSC_DT09 ARM_PIN_PB10
#define VSC_ADR09 ARM_PIN_PB11
#define VSC_DTKN_RDY ARM_PIN_PB17
#define VSC_RWN_WRN_RDN ARM_PIN_PB19
#define VSC_ADR04 ARM_PIN_PB20
#define VSC_DT05 ARM_PIN_PB21
#define VSC_DT06 ARM_PIN_PB22
#define VSC_ADR06 ARM_PIN_PB23
#define VSC_DT07 ARM_PIN_PB24
#define VSC_ADR07 ARM_PIN_PB25
#define VSC_DT08 ARM_PIN_PB26
#define VSC_ADR08 ARM_PIN_PB27
#define VSC_ADR05 ARM_PIN_PB28
#define VSC_DT14 ARM_PIN_PB29
#define VSC_ADR11 ARM_PIN_PB31
#define VSC_DT10 ARM_PIN_PC00
#define VSC_ADR10 ARM_PIN_PC01
const char addrmap[] = {VSC_ADR00, VSC_ADR01, VSC_ADR02, VSC_ADR03,\
VSC_ADR04, VSC_ADR05, VSC_ADR06, VSC_ADR07,\
VSC_ADR08, VSC_ADR09, VSC_ADR10, VSC_ADR11};
const char datamap[] = {VSC_DT00, VSC_DT01, VSC_DT02, VSC_DT03,\
VSC_DT04, VSC_DT05, VSC_DT06, VSC_DT07,\
VSC_DT08, VSC_DT09, VSC_DT10, VSC_DT11,\
VSC_DT12, VSC_DT13, VSC_DT14, VSC_DT15 };
static void wrbit(AT91S_PIO * pio, unsigned short data, int shift, char map[])
{
if((data & (1 << shift)))
pio_set_out(pio, map[shift]);
else
pio_clr_out(pio, map[shift]);
}
static void getbit(AT91S_PIO * pio, unsigned short *data, int shift, char map[])
{
*data |= (pio_get_in(pio, map[shift]) << shift);
}
static int place_addr(unsigned short address)
{
int result = 0, i;
for(i = 0; i < VSC_ADDR_SIZE; i++ )
{
switch(i)
{
case 0: case 1: case 2:
wrbit(pioa, address, i, addrmap);
break;
case 10:
wrbit(pioc, address, i, addrmap);
break;
default:
wrbit(piob, address, i, addrmap);
}
}
return result;
}
static int latch_data(unsigned short *value)
{
int result, i;
for(i = 0; i < VSC_DATA_SIZE; i++)
{
switch(i)
{
case 0: case 1: case 2:
getbit(pioa, value, i, datamap);
break;
case 10:
getbit(pioc, value, i, datamap);
break;
default:
getbit(piob, value, i, datamap);
}
}
return 0;
}