示例#1
0
文件: blkdev.c 项目: walafc0/soclib
int blkdev_read( const size_t lba, void *buffer, const size_t len )
{
	uint32_t i;
	for (i=0; i<len+16; i+=4){
#if __mips >= 32
		asm volatile(
			" cache %0, %1"
			: : "i" (0x11) , "R" (*(uint8_t*)(buffer+i))
			: "memory"
			);
#elif __mips
		asm volatile("lw $0, 0(%0)"::"r"((uint32_t)buffer+i));
#endif
	}
	soclib_io_set(base(BD), BLOCK_DEVICE_LBA, lba);
	soclib_io_set(base(BD), BLOCK_DEVICE_BUFFER, (uint32_t)buffer);
	soclib_io_set(base(BD), BLOCK_DEVICE_COUNT, len);
	soclib_io_set(base(BD), BLOCK_DEVICE_OP, BLOCK_DEVICE_READ);

	int state;
	do {
		state = soclib_io_get(base(BD), BLOCK_DEVICE_STATUS);
	} while (state == BLOCK_DEVICE_BUSY);
	return state;
}
示例#2
0
文件: main.c 项目: walafc0/soclib
static void configure_and_start_dma(unsigned int size,
		unsigned int from, unsigned int to) {

	printf("Configure DMA controller\n\n");
	soclib_io_set(base(IP), DMA_RESET_REG, 0);

	// Read configuration

	soclib_io_set(base(IP), DMA_INFO_REG, DMA_INFO(DMA_READ, DMA_MEM_CONTIG, 0));
	soclib_io_set(base(IP), DMA_MEM_REG, from);
	soclib_io_set(base(IP), DMA_PHASE_REG, 0);
	soclib_io_set(base(IP), DMA_LENGTH_REG, (size*2)>>2);

	soclib_io_set(base(IP), DMA_READ_LOOP_REG,
			DMA_LOOP_COUNT_STRIDE(1, 0));

	// Write configuration

	soclib_io_set(base(IP), DMA_INFO_REG, DMA_INFO(DMA_WRITE, DMA_MEM_CONTIG, 0));
	soclib_io_set(base(IP), DMA_MEM_REG, to);
	soclib_io_set(base(IP), DMA_PHASE_REG, 0);
	soclib_io_set(base(IP), DMA_LENGTH_REG, (size*2)>>2);

	soclib_io_set(base(IP), DMA_WRITE_LOOP_REG,
			DMA_LOOP_COUNT_STRIDE(1, 0));

	soclib_io_set(base(IP), DMA_START_REG, 0 /* unused */);
}
示例#3
0
文件: main.c 项目: walafc0/soclib
int main(void) {
    uint32_t time = 0;
    int cpu = procnum();

    printf("hello From Nios II processor %d\n", procnum());

    printf("start FIR application excecution");
    printf("\n");

    soclib_io_set(timer_address, TIMER_VALUE, 0);
    soclib_io_set(timer_address, TIMER_MODE, TIMER_RUNNING);


    fir_n(a, b, c);

    //  time = soclib_io_get(timer_address, TIMER_VALUE);

    //  printf("\nInterruption caught on proc ");
    //  printf("%d", cpu); printf(" at time ");
    //  printf("%d \n", (int) time);
    //  printf("\n");

    printf("end of FIR testing ");
    printf("\n");

    int *p=(int*)0x0100A000;
    *p = -1;

    while (1)
        ;
    /*   TRAP; */

    return (0);
}
示例#4
0
文件: main.c 项目: walafc0/soclib
int main(void)
{
  const int cpu = procnum();

  lock_lock(&lock);
  printf("Hello from processor %d\n", procnum());
  lock_unlock(&lock);

  set_irq_handler(irq_handler);
  enable_hw_irq(0);
  irq_enable();

  soclib_io_set(
                base(TIMER),
                procnum()*TIMER_SPAN+TIMER_PERIOD,
                period[cpu]);
  soclib_io_set(
                base(TIMER),
		procnum()*TIMER_SPAN+TIMER_MODE,
                TIMER_RUNNING|TIMER_IRQ_ENABLED);

  while (1)
    pause();
  return 0;
}
示例#5
0
文件: blkdev.c 项目: walafc0/soclib
int blkdev_write( const size_t lba, const void *buffer, const size_t len )
{
	soclib_io_set(base(BD), BLOCK_DEVICE_LBA, lba);
	soclib_io_set(base(BD), BLOCK_DEVICE_BUFFER, (uint32_t)buffer);
	soclib_io_set(base(BD), BLOCK_DEVICE_COUNT, len);
	soclib_io_set(base(BD), BLOCK_DEVICE_OP, BLOCK_DEVICE_WRITE);

	int state;
	do {
		state = soclib_io_get(base(BD), BLOCK_DEVICE_STATUS);
	} while (state == BLOCK_DEVICE_BUSY);
	return state;
}
示例#6
0
文件: main.c 项目: walafc0/soclib
int main(void)
{
	uint32_t i;
	const size_t block_size = blkdev_block_size();
	const uint32_t n_sectors = blkdev_size();
	const size_t crc_block_mul = block_size / 512;
	uint8_t data[BLOCKS*block_size];
	uint32_t crc = 0;

	printf("Hello, world\n");

	for ( i=0; i<n_sectors; i+=BLOCKS ) {
		uint32_t x = expected_crc[(i+BLOCKS-1)*crc_block_mul];
		blkdev_read(i, data, BLOCKS);
//		et_hexdump(data, 512*BLOCKS);
	    crc = do_crc32(crc, data, block_size*BLOCKS);
		printf("CRC of %d first blocks is 0x%x, expected: 0x%x\n", i, crc, x);
		assert(crc == x);
	}
	printf("CRC of %d first blocks is 0x%x\n", n_sectors, crc);

	for ( i=0; i<100000; ++i )
		asm volatile("nop");

	soclib_io_set(
		base(SIMHELPER),
		SIMHELPER_SC_STOP,
		0);
	while (1);
	return 0;
}
示例#7
0
文件: api_mwmr.c 项目: walafc0/soclib
void
mwmr_hw_init( void *coproc, enum SoclibMwmrWay way,
			  unsigned int no, const mwmr_t *mwmr )
{
	soclib_io_set( coproc, MWMR_CONFIG_FIFO_WAY, way );
	soclib_io_set( coproc, MWMR_CONFIG_FIFO_NO, no );
	soclib_io_set( coproc, MWMR_CONFIG_STATUS_ADDR, (uint32_t)&mwmr->status );
	soclib_io_set( coproc, MWMR_CONFIG_WIDTH, mwmr->width );
	soclib_io_set( coproc, MWMR_CONFIG_DEPTH, mwmr->gdepth );
	soclib_io_set( coproc, MWMR_CONFIG_BUFFER_ADDR, (uint32_t)mwmr->buffer );
	soclib_io_set( coproc, MWMR_CONFIG_LOCK_ADDR, (uint32_t)mwmr->lock );
	soclib_io_set( coproc, MWMR_CONFIG_RUNNING, 1 );
}
示例#8
0
文件: api_mwmr.c 项目: walafc0/soclib
void mwmr_wait_fifo_empty( void *coproc, enum SoclibMwmrWay way, unsigned int no, mwmr_t *fifo )
{
    //Wait until the RAM fifo is empty
    local_mwmr_status_t status;
	mwmr_lock( fifo->lock );
	rehash_status( fifo, &status );
    while (status.usage > 0) {
        mwmr_unlock( fifo->lock );
        busy_wait(1000);
        mwmr_lock( fifo->lock );
        rehash_status( fifo, &status );
    }
    mwmr_unlock( fifo->lock );
    //Wait untill all the data is consumed by the coprocessor
    int value;
    do {
    soclib_io_set( coproc, MWMR_CONFIG_FIFO_WAY, way );
	soclib_io_set( coproc, MWMR_CONFIG_FIFO_NO, no );
	value = soclib_io_get( coproc, /**MWMR_FIFO_STATUS**/MWMR_FIFO_FILL_STATUS );
    } while (value > 0);
}
示例#9
0
文件: stdlib.c 项目: walafc0/soclib
void exit(int level)
{
#ifdef SIMHELPER_BASE
	soclib_io_set(
		base(SIMHELPER),
		SIMHELPER_END_WITH_RETVAL,
		level);
#else
# warning No simhelper, exit will do a trap and an infinite loop
#endif
	trap();
	while(1);
}
示例#10
0
void irq_handler(int irq)
{
	uint32_t ti;
	int left = atomic_add(&max_interrupts, -1);

	ti = soclib_io_get(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_VALUE);
	printf("IRQ %d received at cycle %d on cpu %d %d interrupts to go\n\n", irq, ti, procnum(), left);
	soclib_io_set(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_RESETIRQ,
		0);

	if(left==0){
	  soclib_io_set(
			base(TIMER),
			procnum()*TIMER_SPAN+TIMER_MODE,
			0);
	}

}
示例#11
0
文件: main.c 项目: sigmax6/sigmav
void irq_handler(int irq)
{
    printf("IRQ handle\n\n");
	uint32_t ti;
	int count = atomic_add(&interrupt_counter, 1);

	ti = soclib_io_get(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_VALUE);
	printf("IRQ %d received at cycle %d on cpu %d, %d interrupts received\n\n", irq, ti, procnum(), count);
	soclib_io_set(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_RESETIRQ,
		0);
}
示例#12
0
void irq_handler(int irq)
{
	const int cpu = procnum();

	uint32_t ti;
	int left = atomic_add(&max_interrupts, -1);

	ti = soclib_io_get(
		base(TIMER),
		cpu*TIMER_SPAN+TIMER_VALUE);
	printf("IRQ %d received at cycle %d on cpu %d %d interrupts to go\n\n", irq, ti, cpu, left);
	soclib_io_set(
		base(TIMER),
		cpu*TIMER_SPAN+TIMER_RESETIRQ,
		0);

	if ( ! left )
		exit(0);
}
示例#13
0
文件: api_mwmr.c 项目: walafc0/soclib
void mwmr_config( void *coproc, unsigned int no, const uint32_t val )
{
	// assert(no < MWMR_IOREG_MAX);
	soclib_io_set( coproc, no, val );
}
示例#14
0
文件: main.c 项目: walafc0/soclib
static inline void set_ctrl(void * base,
		unsigned int addr, unsigned int data) {
	soclib_io_set(base, CTRL_ADDR_REG, addr);
	soclib_io_set(base, CTRL_DATA_REG, data);
}
示例#15
0
文件: tty_main.c 项目: walafc0/soclib
void irq_handler()
{
  char data = soclib_io_get( base(TTY), procnum()*TTY_SPAN + TTY_READ );
  soclib_io_set( base(TTY), procnum()*TTY_SPAN + TTY_WRITE, data);
}
示例#16
0
文件: main.c 项目: sigmax6/sigmav
int main(void)
{
	const int cpu = procnum();

    //unsigned int time;
	printf("Hello from processor %d\n", procnum());

	set_irq_handler(irq_handler);
//  irq_set_pil(0);
//	enable_hw_irq(0);

//	irq_enable();
//  included in enable_hw_irq();

    printf("TIMER_BASE:%x\n",base(TIMER));
    printf("TIMER_SPAN:%d\n",TIMER_SPAN);
    printf("TIMER_RERIOD:%d\n",TIMER_PERIOD);
//   	time = soclib_io_get(
//		base(TIMER),
//		procnum()*TIMER_SPAN+TIMER_VALUE);
//    printf("timer value:%d\n",time );


	soclib_io_set(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_PERIOD,
        10000);
//	period[cpu]);

	soclib_io_set(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_MODE,
		TIMER_RUNNING|TIMER_IRQ_ENABLED);

    int i=0;
    /*
    for(;i<100000;i++)
    {
        for(;j<10000;j++)
            ;
    }
*/

    for (i=0;i<20;i++)
    {
        if(i%NCPU==cpu)
        {
           printf("Fifo %d : %d\n",i,fibo(i));
        }
    }

	time = soclib_io_get(
		base(TIMER),
		procnum()*TIMER_SPAN+TIMER_VALUE);

    finish_bit[cpu]=1;


    while(1)
    {
        int flag=0;
   //     printf("==========\n");
        for(i=0;i<NCPU;i++)
        {
            flag+=finish_bit[cpu];
  //          printf("%d ",finish_bit[cpu]);
        }
   //     printf("\n");
        if (flag == NCPU)
        {
            break;
        }
    }

    printf("RUN_TIME:%d\n",time );

	while (1)
        ;
	//	pause();
	return 0;
}