OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk
    from Rev 504 to Rev 505
    Reverse comparison

Rev 504 → Rev 505

/orpsocv2/rtl/verilog/or1200/or1200_mult_mac.v
250,12 → 250,16
`OR1200_ALUOP_MUL: begin
// Actually doing unsigned multiply internally, and then negate on
// output as appropriate, so if sign bit is set, then is overflow
ovforw = mul_prod_r[31];
// unless incoming signs differ and result is 2^(width-1)
ovforw = (mul_prod_r[width-1] &&
!((a[width-1]^b[width-1]) && ~|mul_prod_r[width-2:0])) ||
|mul_prod_r[2*width-1:32];
 
ov_we = 1;
end
`OR1200_ALUOP_MULU : begin
// Overflow on unsigned multiply is simpler.
ovforw = mul_prod_r[32];
ovforw = |mul_prod_r[2*width-1:32];
ov_we = 1;
end
`endif // `ifdef OR1200_MULT_IMPLEMENTED
262,8 → 266,8
`ifdef OR1200_DIV_IMPLEMENTED
`OR1200_ALUOP_DIVU,
`OR1200_ALUOP_DIV: begin
// Overflow on divide by zero
ovforw = div_by_zero;
// Overflow on divide by zero or -2^(width-1)/-1
ovforw = div_by_zero || (a==32'h8000_0000 && b==32'hffff_ffff);
ov_we = 1;
end
`endif
/orpsocv2/sw/apps/spiflash/spiflash-program.ld
80,17 → 80,10
.bss SIZEOF(.data) + ADDR(.data) :
{
sbss = . ;
_sbss = . ;
__bss_start = ALIGN(0x8);
___bss_start = ALIGN(0x8);
_bss_start = ALIGN(0x8);
*(.bss)
*(COMMON)
end = ALIGN(0x8);
_end = ALIGN(0x8);
__end = ALIGN(0x8);
ebss = .;
_ebss = .;
_bss_end = .;
}
.stab 0 (NOLOAD) :
/orpsocv2/sw/apps/spiflash/README
42,7 → 42,7
ensure the BOARD_PATH variable is set correctly, too.
 
make spiflash-program.elf PROGRAMMINGFILE=/path/to/myapp.bin \
BOARD_PATH=`pwd`/../../../boards/actel/ordb1a3pe1500
BOARD=actel/ordb1a3pe1500
 
It's advisable to do a "make distclean" first, to clear out any previously
compiled software for other boards.
/orpsocv2/sw/drivers/simple-spi/simple-spi.c
9,43 → 9,47
#include "simple-spi.h"
#include "cpu-utils.h"
 
 
const int spi_base_adr[1] = {
#ifdef SPI_NUM_CORES
const int SPI_BASE_ADR[SPI_NUM_CORES] = {SPI_BASE_ADDRESSES_CSV};
#else
// For older builds - need to change them all over to newer format
#ifdef SPI0_BASE
SPI0_BASE
const int SPI_BASE_ADR[1] = {SPI0_BASE};
#else
0
// No SPI present
const int SPI_BASE_ADR[1] = {-1};
#endif
};
#endif
 
 
void
spi_core_enable(int core)
{
REG8((spi_base_adr[core] + SIMPLESPI_SPCR)) |= SIMPLESPI_SPCR_SPE;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPCR)) |= SIMPLESPI_SPCR_SPE;
}
 
void
spi_core_disable(int core)
{
REG8((spi_base_adr[core] + SIMPLESPI_SPCR)) &= ~SIMPLESPI_SPCR_SPE;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPCR)) &= ~SIMPLESPI_SPCR_SPE;
}
 
void
spi_core_interrupt_enable(int core)
{
REG8((spi_base_adr[core] + SIMPLESPI_SPCR)) |= SIMPLESPI_SPCR_SPIE;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPCR)) |= SIMPLESPI_SPCR_SPIE;
}
 
void
spi_core_interrupt_disable(int core)
{
REG8((spi_base_adr[core] + SIMPLESPI_SPCR)) &= ~SIMPLESPI_SPCR_SPIE;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPCR)) &= ~SIMPLESPI_SPCR_SPIE;
}
 
void
spi_core_interrupt_flag_clear(int core)
{
REG8((spi_base_adr[core] + SIMPLESPI_SPSR)) = SIMPLESPI_SPSR_SPIF;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPSR)) = SIMPLESPI_SPSR_SPIF;
}
 
void
52,7 → 56,7
spi_core_clock_setup(int core, char polarity, char phase, char rate,
char ext_rate)
{
char spcr = REG8((spi_base_adr[core] + SIMPLESPI_SPCR));
char spcr = REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPCR));
 
if (polarity)
spcr |= SIMPLESPI_SPCR_CPOL;
66,13 → 70,13
 
spcr = (spcr & ~SIMPLESPI_SPCR_SPR) | (rate & SIMPLESPI_SPCR_SPR);
 
REG8((spi_base_adr[core] + SIMPLESPI_SPCR)) = spcr;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPCR)) = spcr;
 
char sper = REG8((spi_base_adr[core] + SIMPLESPI_SPER));
char sper = REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPER));
sper = (sper & ~SIMPLESPI_SPER_ESPR) | (ext_rate & SIMPLESPI_SPER_ESPR);
 
REG8((spi_base_adr[core] + SIMPLESPI_SPER)) = sper;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPER)) = sper;
 
}
 
79,11 → 83,11
void
spi_core_set_int_count(int core, char cnt)
{
char sper = REG8((spi_base_adr[core] + SIMPLESPI_SPER));
char sper = REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPER));
sper = (sper & ~SIMPLESPI_SPER_ICNT) | cnt;
REG8((spi_base_adr[core] + SIMPLESPI_SPER)) = sper;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPER)) = sper;
}
// No decode on slave select lines, so assert correct bit to select slave
90,19 → 94,19
void
spi_core_slave_select(int core, char slave_sel_dec)
{
REG8((spi_base_adr[core] + SIMPLESPI_SSPU)) = slave_sel_dec;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SSPU)) = slave_sel_dec;
}
 
int
spi_core_data_avail(int core)
{
return !!!(REG8((spi_base_adr[core]+SIMPLESPI_SPSR))&SIMPLESPI_SPSR_RFEMPTY);
return !!!(REG8((SPI_BASE_ADR[core]+SIMPLESPI_SPSR))&SIMPLESPI_SPSR_RFEMPTY);
}
 
int
spi_core_write_avail(int core)
{
return !!!(REG8((spi_base_adr[core]+SIMPLESPI_SPSR))&SIMPLESPI_SPSR_WFFULL);
return !!!(REG8((SPI_BASE_ADR[core]+SIMPLESPI_SPSR))&SIMPLESPI_SPSR_WFFULL);
}
 
// Should call spi_core_write_avail() before calling this, we don't check
109,11 → 113,11
void
spi_core_write_data(int core, char data)
{
REG8((spi_base_adr[core] + SIMPLESPI_SPDR)) = data;
REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPDR)) = data;
}
 
char
spi_core_read_data(int core)
{
return REG8((spi_base_adr[core] + SIMPLESPI_SPDR));
return REG8((SPI_BASE_ADR[core] + SIMPLESPI_SPDR));
}
/orpsocv2/sw/drivers/or1200/or1200-utils.c
98,11 → 98,17
return timer_ticks;
}
 
/* Wait for 10ms */
/* Wait for 10ms, assumes CLK_HZ is 100, which it usually is.
Will be slightly inaccurate!*/
void
cpu_sleep_10ms(void)
{
unsigned long ttcr = mfspr(SPR_TTCR) & SPR_TTCR_PERIOD;
unsigned long first_time = cpu_get_timer_ticks();
while (first_time == cpu_get_timer_ticks());
while (first_time == cpu_get_timer_ticks()); // Wait for tick to occur
// Now wait until we're past the tick value we read before to know we've
// gone at least enough
while(ttcr > (mfspr(SPR_TTCR) & SPR_TTCR_PERIOD));
 
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.