diff --git a/rtl/ossc.v b/rtl/ossc.v index d7af51d..e7bc936 100644 --- a/rtl/ossc.v +++ b/rtl/ossc.v @@ -149,18 +149,18 @@ assign cpu_reset_n = reset_n_reg; sys sys_inst( .clk_clk (clk27), .reset_reset_n (cpu_reset_n), + .i2c_opencores_0_export_scl_pad_io (scl), + .i2c_opencores_0_export_sda_pad_io (sda), + .spi_0_external_MISO (SD_DAT[0]), + .spi_0_external_MOSI (SD_CMD), + .spi_0_external_SCLK (SD_CLK), + .spi_0_external_SS_n (SD_DAT[3]), .pio_0_sys_ctrl_out_export (sys_ctrl), .pio_1_controls_in_export ({ir_code_cnt, 5'b00000, HDMI_TX_MODE, btn, ir_code}), .pio_2_horizontal_info_out_export (h_info), .pio_3_vertical_info_out_export (v_info), .pio_4_linecount_in_export ({VSYNC_out, 13'h0000, fpga_vsyncgen, 5'h00, lines_out}), - .pio_5_lcd_ctrl_out_export (lcd_ctrl), - .i2c_opencores_0_export_scl_pad_io (scl), - .i2c_opencores_0_export_sda_pad_io (sda), - .sdcard_0_b_SD_cmd (SD_CMD), - .sdcard_0_b_SD_dat (SD_DAT[0]), - .sdcard_0_b_SD_dat3 (SD_DAT[3]), - .sdcard_0_o_SD_clock (SD_CLK) + .pio_5_lcd_ctrl_out_export (lcd_ctrl) ); scanconverter scanconverter_inst ( diff --git a/software/ossc_sw.project b/software/ossc_sw.project index f6db809..642e6a5 100644 --- a/software/ossc_sw.project +++ b/software/ossc_sw.project @@ -79,6 +79,13 @@ + + + + + + + diff --git a/software/sys_controller/it6613/it6613_drv.h b/software/sys_controller/it6613/it6613_drv.h index f2062f9..e2077be 100644 --- a/software/sys_controller/it6613/it6613_drv.h +++ b/software/sys_controller/it6613/it6613_drv.h @@ -507,7 +507,7 @@ #define B_AUDFMT_MSB_SHIFT_FIRST (0<<4) #define B_AUDFMT_LSB_SHIFT_FIRST (1<<4) #define B_AUDFMT_RISE_EDGE_SAMPLE_WS (0<<5) - #define B_AUDFMT_FALL_EDGE_SAMPLE_WS (0<<5) + #define B_AUDFMT_FALL_EDGE_SAMPLE_WS (1<<5) #define REG_TX_AUDIO_FIFOMAP 0xE2 #define O_FIFO3SEL 6 diff --git a/software/sys_controller/memory/sdcard.c b/software/sys_controller/memory/sdcard.c index 63f1f4a..c998b64 100644 --- a/software/sys_controller/memory/sdcard.c +++ b/software/sys_controller/memory/sdcard.c @@ -28,7 +28,7 @@ alt_up_sd_card_dev *sdcard_dev; int read_sd_block(alt_u32 offset, alt_u32 size, alt_u8 *dstbuf) { - int i; + /*int i; alt_u32 tmp; if ((offset % SD_BUFFER_SIZE) || (size > 512)) { @@ -48,13 +48,13 @@ int read_sd_block(alt_u32 offset, alt_u32 size, alt_u8 *dstbuf) tmp = IORD_32DIRECT(sdcard_dev->base, i); *((alt_u32*)(dstbuf+i)) = tmp; } - +*/ return 0; } int check_sdcard(alt_u8 *databuf) { - sdcard_dev = alt_up_sd_card_open_dev(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_NAME); + /* sdcard_dev = alt_up_sd_card_open_dev(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_NAME); if ((sdcard_dev == NULL) || !alt_up_sd_card_is_Present()) { sniprintf(menu_row1, LCD_ROW_LEN+1, "No SD card det."); @@ -62,5 +62,6 @@ int check_sdcard(alt_u8 *databuf) return 1; } - return read_sd_block(0, 512, databuf); + return read_sd_block(0, 512, databuf);*/ + return 0; } diff --git a/software/sys_controller/ossc/firmware.h b/software/sys_controller/ossc/firmware.h index 6d0319b..dbe9a2f 100644 --- a/software/sys_controller/ossc/firmware.h +++ b/software/sys_controller/ossc/firmware.h @@ -23,7 +23,7 @@ #include "alt_types.h" #define FW_VER_MAJOR 0 -#define FW_VER_MINOR 73 +#define FW_VER_MINOR 74 #define FW_UPDATE_RETRIES 3 diff --git a/software/sys_controller/ulibSD/integer.h b/software/sys_controller/ulibSD/integer.h new file mode 100644 index 0000000..29a1f0e --- /dev/null +++ b/software/sys_controller/ulibSD/integer.h @@ -0,0 +1,78 @@ +/* + * File: integer.h + * Author: Nelson Lombardo + * Year: 2015 + * e-mail: nelson.lombardo@gmail.com + * License at the end of file. + */ + +/*****************************************************************************/ +/* Integer type definitions */ +/*****************************************************************************/ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include + +/* 16-bit, 32-bit or larger integer */ +typedef int16_t INT; +typedef uint16_t UINT; + +/* 8-bit integer */ +typedef int8_t CHAR; +typedef uint8_t UCHAR; +typedef uint8_t BYTE; +typedef uint8_t BOOL; + +/* 16-bit integer */ +typedef int16_t SHORT; +typedef uint16_t USHORT; +typedef uint16_t WORD; +typedef uint16_t WCHAR; + +/* 32-bit integer */ +typedef int32_t LONG; +typedef uint32_t ULONG; +typedef uint32_t DWORD; + +/* Boolean type */ +typedef enum { FALSE = 0, TRUE } BOOLEAN; +typedef enum { LOW = 0, HIGH } THROTTLE; + +#endif + +// «integer.h» is part of: +/*----------------------------------------------------------------------------/ +/ ulibSD - Library for SD cards semantics (C)Nelson Lombardo, 2015 +/-----------------------------------------------------------------------------/ +/ ulibSD library is a free software that opened under license policy of +/ following conditions. +/ +/ Copyright (C) 2015, ChaN, all right reserved. +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ + +// Derived from Mister Chan works on FatFs code (http://elm-chan.org/fsw/ff/00index_e.html): +/*----------------------------------------------------------------------------/ +/ FatFs - FAT file system module R0.11 (C)ChaN, 2015 +/-----------------------------------------------------------------------------/ +/ FatFs module is a free software that opened under license policy of +/ following conditions. +/ +/ Copyright (C) 2015, ChaN, all right reserved. +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ diff --git a/software/sys_controller/ulibSD/sd_io.c b/software/sys_controller/ulibSD/sd_io.c new file mode 100644 index 0000000..aab56c1 --- /dev/null +++ b/software/sys_controller/ulibSD/sd_io.c @@ -0,0 +1,482 @@ +/* + * File: sd_io.c + * Author: Nelson Lombardo + * Year: 2015 + * e-mail: nelson.lombardo@gmail.com + * License at the end of file. + */ + +#include "sd_io.h" + +#ifdef _M_IX86 // For use over x86 +/*****************************************************************************/ +/* Private Methods Prototypes - Direct work with PC file */ +/*****************************************************************************/ + +/** + * \brief Get the total numbers of sectors in SD card. + * \param dev Device descriptor. + * \return Quantity of sectors. Zero if fail. + */ +DWORD __SD_Sectors (SD_DEV* dev); + +/*****************************************************************************/ +/* Private Methods - Direct work with PC file */ +/*****************************************************************************/ + +DWORD __SD_Sectors (SD_DEV *dev) +{ + if (dev->fp == NULL) return(0); // Fail + else { + fseek(dev->fp, 0L, SEEK_END); + return (((DWORD)(ftell(dev->fp)))/((DWORD)512)-1); + } +} +#else // For use with uControllers +/****************************************************************************** + Private Methods Prototypes - Direct work with SD card +******************************************************************************/ + +/** + \brief Simple function to calculate power of two. + \param e Exponent. + \return Math function result. +*/ +DWORD __SD_Power_Of_Two(BYTE e); + +/** + \brief Assert the SD card (SPI CS low). + */ +inline void __SD_Assert (void); + +/** + \brief Deassert the SD (SPI CS high). + */ +inline void __SD_Deassert (void); + +/** + \brief Change to max the speed transfer. + \param throttle + */ +void __SD_Speed_Transfer (BYTE throttle); + +/** + \brief Send SPI commands. + \param cmd Command to send. + \param arg Argument to send. + \return R1 response. + */ +BYTE __SD_Send_Cmd(BYTE cmd, DWORD arg); + +/** + \brief Write a data block on SD card. + \param dat Storage the data to transfer. + \param token Inidicates the type of transfer (single or multiple). + */ +SDRESULTS __SD_Write_Block(SD_DEV *dev, void *dat, BYTE token); + +/** + \brief Get the total numbers of sectors in SD card. + \param dev Device descriptor. + \return Quantity of sectors. Zero if fail. + */ +DWORD __SD_Sectors (SD_DEV *dev); + +/****************************************************************************** + Private Methods - Direct work with SD card +******************************************************************************/ + +DWORD __SD_Power_Of_Two(BYTE e) +{ + DWORD partial = 1; + BYTE idx; + for(idx=0; idx!=e; idx++) partial *= 2; + return(partial); +} + +inline void __SD_Assert(void){ + SPI_CS_Low(); +} + +inline void __SD_Deassert(void){ + SPI_CS_High(); +} + +void __SD_Speed_Transfer(BYTE throttle) { + if(throttle == HIGH) SPI_Freq_High(); + else SPI_Freq_Low(); +} + +BYTE __SD_Send_Cmd(BYTE cmd, DWORD arg) +{ + BYTE crc, res; + // ACMD«n» is the command sequense of CMD55-CMD«n» + if(cmd & 0x80) { + cmd &= 0x7F; + res = __SD_Send_Cmd(CMD55, 0); + if (res > 1) return (res); + } + + // Select the card + __SD_Deassert(); + SPI_RW(0xFF); + __SD_Assert(); + SPI_RW(0xFF); + + // Send complete command set + SPI_RW(cmd); // Start and command index + SPI_RW((BYTE)(arg >> 24)); // Arg[31-24] + SPI_RW((BYTE)(arg >> 16)); // Arg[23-16] + SPI_RW((BYTE)(arg >> 8 )); // Arg[15-08] + SPI_RW((BYTE)(arg >> 0 )); // Arg[07-00] + + // CRC? + crc = 0x01; // Dummy CRC and stop + if(cmd == CMD0) crc = 0x95; // Valid CRC for CMD0(0) + if(cmd == CMD8) crc = 0x87; // Valid CRC for CMD8(0x1AA) + SPI_RW(crc); + + // Receive command response + // Wait for a valid response in timeout of 5 milliseconds + SPI_Timer_On(5); + do { + res = SPI_RW(0xFF); + } while((res & 0x80)&&(SPI_Timer_Status()==TRUE)); + SPI_Timer_Off(); + // Return with the response value + return(res); +} + +SDRESULTS __SD_Write_Block(SD_DEV *dev, void *dat, BYTE token) +{ + WORD idx; + BYTE line; + // Send token (single or multiple) + SPI_RW(token); + // Single block write? + if(token != 0xFD) + { + // Send block data + for(idx=0; idx!=SD_BLK_SIZE; idx++) SPI_RW(*((BYTE*)dat + idx)); + /* Dummy CRC */ + SPI_RW(0xFF); + SPI_RW(0xFF); + // If not accepted, returns the reject error + if((SPI_RW(0xFF) & 0x1F) != 0x05) return(SD_REJECT); + } +#ifdef SD_IO_WRITE_WAIT_BLOCKER + // Waits until finish of data programming (blocked) + while(SPI_RW(0xFF)==0); + return(SD_OK); +#else + // Waits until finish of data programming with a timeout + SPI_Timer_On(SD_IO_WRITE_TIMEOUT_WAIT); + do { + line = SPI_RW(0xFF); + } while((line==0)&&(SPI_Timer_Status()==TRUE)); + SPI_Timer_Off(); +#ifdef SD_IO_DBG_COUNT + dev->debug.write++; +#endif + if(line==0) return(SD_BUSY); + else return(SD_OK); +#endif +} + +DWORD __SD_Sectors (SD_DEV *dev) +{ + BYTE csd[16]; + BYTE idx; + DWORD ss = 0; + WORD C_SIZE = 0; + BYTE C_SIZE_MULT = 0; + BYTE READ_BL_LEN = 0; + if(__SD_Send_Cmd(CMD9, 0)==0) + { + // Wait for response + while (SPI_RW(0xFF) == 0xFF); + for (idx=0; idx!=16; idx++) csd[idx] = SPI_RW(0xFF); + // Dummy CRC + SPI_RW(0xFF); + SPI_RW(0xFF); + SPI_Release(); + if(dev->cardtype & SDCT_SD1) + { + ss = csd[0]; + // READ_BL_LEN[83:80]: max. read data block length + READ_BL_LEN = (csd[5] & 0x0F); + // C_SIZE [73:62] + C_SIZE = (csd[6] & 0x03); + C_SIZE <<= 8; + C_SIZE |= (csd[7]); + C_SIZE <<= 2; + C_SIZE |= ((csd[8] >> 6) & 0x03); + // C_SIZE_MULT [49:47] + C_SIZE_MULT = (csd[9] & 0x03); + C_SIZE_MULT <<= 1; + C_SIZE_MULT |= ((csd[10] >> 7) & 0x01); + } + else if(dev->cardtype & SDCT_SD2) + { + // C_SIZE [69:48] + C_SIZE = (csd[7] & 0x3F); + C_SIZE <<= 8; + C_SIZE |= (csd[8] & 0xFF); + C_SIZE <<= 8; + C_SIZE |= (csd[9] & 0xFF); + // C_SIZE_MULT [--]. don't exits + C_SIZE_MULT = 0; + } + ss = (C_SIZE + 1); + ss *= __SD_Power_Of_Two(C_SIZE_MULT + 2); + ss *= __SD_Power_Of_Two(READ_BL_LEN); + ss /= SD_BLK_SIZE; + return (ss); + } else return (0); // Error +} +#endif // Private methods for uC + +/****************************************************************************** + Public Methods - Direct work with SD card +******************************************************************************/ + +SDRESULTS SD_Init(SD_DEV *dev) +{ +#if defined(_M_IX86) // x86 + dev->fp = fopen(dev->fn, "r+"); + if (dev->fp == NULL) + return (SD_ERROR); + else + { + dev->last_sector = __SD_Sectors(dev); +#ifdef SD_IO_DBG_COUNT + dev->debug.read = 0; + dev->debug.write = 0; +#endif + return (SD_OK); + } +#else // uControllers + BYTE n, cmd, ct, ocr[4]; + BYTE idx; + BYTE init_trys; + ct = 0; + for(init_trys=0; ((init_trys!=SD_INIT_TRYS)&&(!ct)); init_trys++) + { + // Initialize SPI for use with the memory card + SPI_Init(); + + SPI_CS_High(); + SPI_Freq_Low(); + + // 80 dummy clocks + for(idx = 0; idx != 10; idx++) SPI_RW(0xFF); + + SPI_Timer_On(500); + while(SPI_Timer_Status()==TRUE); + SPI_Timer_Off(); + + dev->mount = FALSE; + SPI_Timer_On(500); + while ((__SD_Send_Cmd(CMD0, 0) != 1)&&(SPI_Timer_Status()==TRUE)); + SPI_Timer_Off(); + // Idle state + if (__SD_Send_Cmd(CMD0, 0) == 1) { + // SD version 2? + if (__SD_Send_Cmd(CMD8, 0x1AA) == 1) { + // Get trailing return value of R7 resp + for (n = 0; n < 4; n++) ocr[n] = SPI_RW(0xFF); + // VDD range of 2.7-3.6V is OK? + if ((ocr[2] == 0x01)&&(ocr[3] == 0xAA)) + { + // Wait for leaving idle state (ACMD41 with HCS bit)... + SPI_Timer_On(1000); + while ((SPI_Timer_Status()==TRUE)&&(__SD_Send_Cmd(ACMD41, 1UL << 30))); + SPI_Timer_Off(); + // CCS in the OCR? + if ((SPI_Timer_Status()==TRUE)&&(__SD_Send_Cmd(CMD58, 0) == 0)) + { + for (n = 0; n < 4; n++) ocr[n] = SPI_RW(0xFF); + // SD version 2? + ct = (ocr[0] & 0x40) ? SDCT_SD2 | SDCT_BLOCK : SDCT_SD2; + } + } + } else { + // SD version 1 or MMC? + if (__SD_Send_Cmd(ACMD41, 0) <= 1) + { + // SD version 1 + ct = SDCT_SD1; + cmd = ACMD41; + } else { + // MMC version 3 + ct = SDCT_MMC; + cmd = CMD1; + } + // Wait for leaving idle state + SPI_Timer_On(250); + while((SPI_Timer_Status()==TRUE)&&(__SD_Send_Cmd(cmd, 0))); + SPI_Timer_Off(); + if(SPI_Timer_Status()==FALSE) ct = 0; + if(__SD_Send_Cmd(CMD59, 0)) ct = 0; // Deactivate CRC check (default) + if(__SD_Send_Cmd(CMD16, 512)) ct = 0; // Set R/W block length to 512 bytes + } + } + } + if(ct) { + dev->cardtype = ct; + dev->mount = TRUE; + dev->last_sector = __SD_Sectors(dev) - 1; +#ifdef SD_IO_DBG_COUNT + dev->debug.read = 0; + dev->debug.write = 0; +#endif + __SD_Speed_Transfer(HIGH); // High speed transfer + } + SPI_Release(); + return (ct ? SD_OK : SD_NOINIT); +#endif +} + +SDRESULTS SD_Read(SD_DEV *dev, void *dat, DWORD sector, WORD ofs, WORD cnt) +{ +#if defined(_M_IX86) // x86 + // Check the sector query + if((sector > dev->last_sector)||(cnt == 0)) return(SD_PARERR); + if(dev->fp!=NULL) + { + if (fseek(dev->fp, ((512 * sector) + ofs), SEEK_SET)!=0) + return(SD_ERROR); + else { + if(fread(dat, 1, (cnt - ofs),dev->fp)==(cnt - ofs)) + { +#ifdef SD_IO_DBG_COUNT + dev->debug.read++; +#endif + return(SD_OK); + } + else return(SD_ERROR); + } + } else { + return(SD_ERROR); + } +#else // uControllers + SDRESULTS res; + BYTE tkn; + WORD remaining; + res = SD_ERROR; + if ((sector > dev->last_sector)||(cnt == 0)) return(SD_PARERR); + // Convert sector number to byte address (sector * SD_BLK_SIZE) + if (__SD_Send_Cmd(CMD17, sector * SD_BLK_SIZE) == 0) { + SPI_Timer_On(100); // Wait for data packet (timeout of 100ms) + do { + tkn = SPI_RW(0xFF); + } while((tkn==0xFF)&&(SPI_Timer_Status()==TRUE)); + SPI_Timer_Off(); + // Token of single block? + if(tkn==0xFE) { + // Size block (512 bytes) + CRC (2 bytes) - offset - bytes to count + remaining = SD_BLK_SIZE + 2 - ofs - cnt; + // Skip offset + if(ofs) { + do { + SPI_RW(0xFF); + } while(--ofs); + } + // I receive the data and I write in user's buffer + do { + *(BYTE*)dat = SPI_RW(0xFF); + dat++; + } while(--cnt); + // Skip remaining + do { + SPI_RW(0xFF); + } while (--remaining); + res = SD_OK; + } + } + SPI_Release(); +#ifdef SD_IO_DBG_COUNT + dev->debug.read++; +#endif + return(res); +#endif +} + +#ifdef SD_IO_WRITE +SDRESULTS SD_Write(SD_DEV *dev, void *dat, DWORD sector) +{ +#if defined(_M_IX86) // x86 + // Query ok? + if(sector > dev->last_sector) return(SD_PARERR); + if(dev->fp != NULL) + { + if(fseek(dev->fp, SD_BLK_SIZE * sector, SEEK_SET)!=0) + return(SD_ERROR); + else { + if(fwrite(dat, 1, SD_BLK_SIZE, dev->fp)==SD_BLK_SIZE) + { +#ifdef SD_IO_DBG_COUNT + dev->debug.write++; +#endif + return(SD_OK); + } + else return(SD_ERROR); + } + } else return(SD_ERROR); +#else // uControllers + // Query ok? + if(sector > dev->last_sector) return(SD_PARERR); + // Single block write (token <- 0xFE) + // Convert sector number to bytes address (sector * SD_BLK_SIZE) + if(__SD_Send_Cmd(CMD24, sector * SD_BLK_SIZE)==0) + return(__SD_Write_Block(dev, dat, 0xFE)); + else + return(SD_ERROR); +#endif +} +#endif + +SDRESULTS SD_Status(SD_DEV *dev) +{ +#if defined(_M_IX86) + return((dev->fp == NULL) ? SD_OK : SD_NORESPONSE); +#else + return(__SD_Send_Cmd(CMD0, 0) ? SD_OK : SD_NORESPONSE); +#endif +} + +// «sd_io.c» is part of: +/*----------------------------------------------------------------------------/ +/ ulibSD - Library for SD cards semantics (C)Nelson Lombardo, 2015 +/-----------------------------------------------------------------------------/ +/ ulibSD library is a free software that opened under license policy of +/ following conditions. +/ +/ Copyright (C) 2015, ChaN, all right reserved. +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ + +// Derived from Mister Chan works on FatFs code (http://elm-chan.org/fsw/ff/00index_e.html): +/*----------------------------------------------------------------------------/ +/ FatFs - FAT file system module R0.11 (C)ChaN, 2015 +/-----------------------------------------------------------------------------/ +/ FatFs module is a free software that opened under license policy of +/ following conditions. +/ +/ Copyright (C) 2015, ChaN, all right reserved. +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ diff --git a/software/sys_controller/ulibSD/sd_io.h b/software/sys_controller/ulibSD/sd_io.h new file mode 100644 index 0000000..3bbb38c --- /dev/null +++ b/software/sys_controller/ulibSD/sd_io.h @@ -0,0 +1,187 @@ +/* + * File: sd_io.h + * Author: Nelson Lombardo + * Year: 2015 + * e-mail: nelson.lombardo@gmail.com + * License at the end of file. + */ + +#ifndef _SD_IO_H_ +#define _SD_IO_H_ + +/*****************************************************************************/ +/* Configurations */ +/*****************************************************************************/ +//#define _M_IX86 // For use with x86 architecture +#define SD_IO_WRITE +//#define SD_IO_WRITE_WAIT_BLOCKER +#define SD_IO_WRITE_TIMEOUT_WAIT 250 + +//#define SD_IO_DBG_COUNT +/*****************************************************************************/ + +#if defined(_M_IX86) + +#include +#include "integer.h" + +/* Results of SD functions */ +typedef enum { + SD_OK = 0, /* 0: Function succeeded */ + SD_NOINIT /* 1: SD not initialized */ + SD_ERROR, /* 2: Disk error */ + SD_PARERR, /* 3: Invalid parameter */ + SD_BUSY, /* 4: Programming busy */ + SD_REJECT /* 5: Reject data */ +} SDRESULTS; + +#ifdef SD_IO_DBG_COUNT +typedef struct _DBG_COUNT { + WORD read; + WORD write; +} DBG_COUNT; +#endif + +/* SD device object */ +typedef struct _SD_DEV { + BOOL mount; + BYTE cardtype; + char fn[20]; /* dd if=/dev/zero of=sim_sd.raw bs=1k count=0 seek=8192 */ + FILE *fp; + DWORD last_sector; +#ifdef SD_IO_DBG_COUNT + DBG_COUNT debug; +#endif +} SD_DEV; + +#else // For use with uControllers + +#include "spi_io.h" /* Provide the low-level functions */ + +/* Definitions of SD commands */ +#define CMD0 (0x40+0) /* GO_IDLE_STATE */ +#define CMD1 (0x40+1) /* SEND_OP_COND (MMC) */ +#define ACMD41 (0xC0+41) /* SEND_OP_COND (SDC) */ +#define CMD8 (0x40+8) /* SEND_IF_COND */ +#define CMD9 (0x40+9) /* SEND_CSD */ +#define CMD16 (0x40+16) /* SET_BLOCKLEN */ +#define CMD17 (0x40+17) /* READ_SINGLE_BLOCK */ +#define CMD24 (0x40+24) /* WRITE_SINGLE_BLOCK */ +#define CMD42 (0x40+42) /* LOCK_UNLOCK */ +#define CMD55 (0x40+55) /* APP_CMD */ +#define CMD58 (0x40+58) /* READ_OCR */ +#define CMD59 (0x40+59) /* CRC_ON_OFF */ + +#define SD_INIT_TRYS 0x03 + +/* CardType) */ +#define SDCT_MMC 0x01 /* MMC version 3 */ +#define SDCT_SD1 0x02 /* SD version 1 */ +#define SDCT_SD2 0x04 /* SD version 2 */ +#define SDCT_SDC (SDCT_SD1|SDCT_SD2) /* SD */ +#define SDCT_BLOCK 0x08 /* Block addressing */ + +#define SD_BLK_SIZE 512 + +/* Results of SD functions */ +typedef enum { + SD_OK = 0, /* 0: Function succeeded */ + SD_NOINIT, /* 1: SD not initialized */ + SD_ERROR, /* 2: Disk error */ + SD_PARERR, /* 3: Invalid parameter */ + SD_BUSY, /* 4: Programming busy */ + SD_REJECT, /* 5: Reject data */ + SD_NORESPONSE /* 6: No response */ +} SDRESULTS; + +#ifdef SD_IO_DBG_COUNT +typedef struct _DBG_COUNT { + WORD read; + WORD write; +} DBG_COUNT; +#endif + + +/* SD device object */ +typedef struct _SD_DEV { + BOOL mount; + BYTE cardtype; + DWORD last_sector; +#ifdef SD_IO_DBG_COUNT + DBG_COUNT debug; +#endif +} SD_DEV; + +#endif + +/******************************************************************************* + * Public Methods - Direct work with SD card * + ******************************************************************************/ + +/** + \brief Initialization the SD card. + \return If all goes well returns SD_OK. + */ +SDRESULTS SD_Init (SD_DEV *dev); + +/** + \brief Read a single block. + \param dest Pointer to the destination object to put data + \param sector Start sector number (internally is converted to byte address). + \param ofs Byte offset in the sector (0..511). + \param cnt Byte count (1..512). + \return If all goes well returns SD_OK. + */ +SDRESULTS SD_Read (SD_DEV *dev, void *dat, DWORD sector, WORD ofs, WORD cnt); + +/** + \brief Write a single block. + \param dat Data to write. + \param sector Sector number to write (internally is converted to byte address). + \return If all goes well returns SD_OK. + */ +SDRESULTS SD_Write (SD_DEV *dev, void *dat, DWORD sector); + +/** + \brief Allows know status of SD card. + \return If all goes well returns SD_OK. +*/ +SDRESULTS SD_Status (SD_DEV *dev); + +#endif + +// «sd_io.h» is part of: +/*----------------------------------------------------------------------------/ +/ ulibSD - Library for SD cards semantics (C)Nelson Lombardo, 2015 +/-----------------------------------------------------------------------------/ +/ ulibSD library is a free software that opened under license policy of +/ following conditions. +/ +/ Copyright (C) 2015, ChaN, all right reserved. +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ + +// Derived from Mister Chan works on FatFs code (http://elm-chan.org/fsw/ff/00index_e.html): +/*----------------------------------------------------------------------------/ +/ FatFs - FAT file system module R0.11 (C)ChaN, 2015 +/-----------------------------------------------------------------------------/ +/ FatFs module is a free software that opened under license policy of +/ following conditions. +/ +/ Copyright (C) 2015, ChaN, all right reserved. +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ diff --git a/software/sys_controller/ulibSD/spi_io.c b/software/sys_controller/ulibSD/spi_io.c new file mode 100644 index 0000000..c27e0b0 --- /dev/null +++ b/software/sys_controller/ulibSD/spi_io.c @@ -0,0 +1,46 @@ +#include "spi_io.h" + +#define SD_SLAVE_ID 0 + +void SPI_Init (void) { + return; +} + +BYTE SPI_RW (BYTE d) { + BYTE rdata; + + alt_avalon_spi_command(SPI_0_BASE, SD_SLAVE_ID, 1, &d, 1, &rdata, 0); + return rdata; +} + +void SPI_Release (void) { + return; +} + +inline void SPI_CS_Low (void) { + return; +} + +inline void SPI_CS_High (void){ + return; +} + +inline void SPI_Freq_High (void) { + return; +} + +inline void SPI_Freq_Low (void) { + return; +} + +void SPI_Timer_On (WORD ms) { + +} + +inline BOOL SPI_Timer_Status (void) { + +} + +inline void SPI_Timer_Off (void) { + +} diff --git a/software/sys_controller/ulibSD/spi_io.h b/software/sys_controller/ulibSD/spi_io.h new file mode 100644 index 0000000..cd36813 --- /dev/null +++ b/software/sys_controller/ulibSD/spi_io.h @@ -0,0 +1,96 @@ +/* + * spi_io.h + * Author: Nelson Lombardo (C) 2015 + * e-mail: nelson.lombardo@gmail.com + * License at the end of file. + */ + +#ifndef _SPI_IO_H_ +#define _SPI_IO_H_ + +#include "integer.h" /* Type redefinition for portability */ + + +/****************************************************************************** + Public methods + *****************************************************************************/ + +/** + \brief Initialize SPI hardware + */ +void SPI_Init (void); + +/** + \brief Read/Write a single byte. + \param d Byte to send. + \return Byte that arrived. + */ +BYTE SPI_RW (BYTE d); + +/** + \brief Flush of SPI buffer. + */ +void SPI_Release (void); + +/** + \brief Selecting function in SPI terms, associated with SPI module. + */ +void SPI_CS_Low (void); + +/** + \brief Deselecting function in SPI terms, associated with SPI module. + */ +void SPI_CS_High (void); + +/** + \brief Setting frequency of SPI's clock to maximun possible. + */ +void SPI_Freq_High (void); + +/** + \brief Setting frequency of SPI's clock equal or lower than 400kHz. + */ +void SPI_Freq_Low (void); + +/** + \brief Start a non-blocking timer. + \param ms Milliseconds. + */ +void SPI_Timer_On (WORD ms); + +/** + \brief Check the status of non-blocking timer. + \return Status, TRUE if timeout is not reach yet. + */ +BOOL SPI_Timer_Status (void); + +/** + \brief Stop of non-blocking timer. Mandatory. + */ +void SPI_Timer_Off (void); + +#endif + +/* +The MIT License (MIT) + +Copyright (c) 2015 Nelson Lombardo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ diff --git a/software/sys_controller_bsp/Makefile b/software/sys_controller_bsp/Makefile index 2ecc07c..8802349 100644 --- a/software/sys_controller_bsp/Makefile +++ b/software/sys_controller_bsp/Makefile @@ -202,13 +202,6 @@ GENERATED_C_LIB_SRCS += alt_sys_init.c # used to build each file. #------------------------------------------------------------------------------- -# altera_up_sd_card_avalon_interface_mod_driver sources root -Altera_UP_SD_Card_Avalon_Interface_mod_driver_SRCS_ROOT := drivers - -# altera_up_sd_card_avalon_interface_mod_driver sources -Altera_UP_SD_Card_Avalon_Interface_mod_driver_C_LIB_SRCS := \ - $(Altera_UP_SD_Card_Avalon_Interface_mod_driver_SRCS_ROOT)/src/Altera_UP_SD_Card_Avalon_Interface_mod.c - # altera_avalon_jtag_uart_driver sources root altera_avalon_jtag_uart_driver_SRCS_ROOT := drivers @@ -224,6 +217,22 @@ altera_avalon_jtag_uart_driver_C_LIB_SRCS := \ altera_avalon_pio_driver_SRCS_ROOT := drivers # altera_avalon_pio_driver sources +# altera_avalon_spi_driver sources root +altera_avalon_spi_driver_SRCS_ROOT := drivers + +# altera_avalon_spi_driver sources +altera_avalon_spi_driver_C_LIB_SRCS := \ + $(altera_avalon_spi_driver_SRCS_ROOT)/src/altera_avalon_spi.c + +# altera_avalon_timer_driver sources root +altera_avalon_timer_driver_SRCS_ROOT := drivers + +# altera_avalon_timer_driver sources +altera_avalon_timer_driver_C_LIB_SRCS := \ + $(altera_avalon_timer_driver_SRCS_ROOT)/src/altera_avalon_timer_sc.c \ + $(altera_avalon_timer_driver_SRCS_ROOT)/src/altera_avalon_timer_ts.c \ + $(altera_avalon_timer_driver_SRCS_ROOT)/src/altera_avalon_timer_vars.c + # altera_epcq_controller_mod_driver sources root altera_epcq_controller_mod_driver_SRCS_ROOT := drivers @@ -345,8 +354,9 @@ nios2_hw_crc32_driver_C_LIB_SRCS := \ # Assemble all component C source files COMPONENT_C_LIB_SRCS += \ - $(Altera_UP_SD_Card_Avalon_Interface_mod_driver_C_LIB_SRCS) \ $(altera_avalon_jtag_uart_driver_C_LIB_SRCS) \ + $(altera_avalon_spi_driver_C_LIB_SRCS) \ + $(altera_avalon_timer_driver_C_LIB_SRCS) \ $(altera_epcq_controller_mod_driver_C_LIB_SRCS) \ $(altera_nios2_gen2_hal_driver_C_LIB_SRCS) \ $(hal_C_LIB_SRCS) \ diff --git a/software/sys_controller_bsp/alt_sys_init.c b/software/sys_controller_bsp/alt_sys_init.c index ebab50c..50c29f4 100644 --- a/software/sys_controller_bsp/alt_sys_init.c +++ b/software/sys_controller_bsp/alt_sys_init.c @@ -4,7 +4,7 @@ * Machine generated for CPU 'nios2_qsys_0' in SOPC Builder design 'sys' * SOPC Builder design path: ../../sys.sopcinfo * - * Generated: Wed Dec 30 21:13:11 EET 2015 + * Generated: Sun Oct 16 12:18:06 EEST 2016 */ /* @@ -59,8 +59,9 @@ */ #include "altera_nios2_gen2_irq.h" -#include "Altera_UP_SD_Card_Avalon_Interface_mod.h" #include "altera_avalon_jtag_uart.h" +#include "altera_avalon_spi.h" +#include "altera_avalon_timer.h" #include "altera_epcq_controller_mod.h" #include "i2c_opencores.h" @@ -70,8 +71,9 @@ ALTERA_NIOS2_GEN2_IRQ_INSTANCE ( NIOS2_QSYS_0, nios2_qsys_0); ALTERA_AVALON_JTAG_UART_INSTANCE ( JTAG_UART_0, jtag_uart_0); +ALTERA_AVALON_SPI_INSTANCE ( SPI_0, spi_0); +ALTERA_AVALON_TIMER_INSTANCE ( TIMER_0, timer_0); ALTERA_EPCQ_CONTROLLER_MOD_AVL_MEM_AVL_CSR_INSTANCE ( EPCQ_CONTROLLER_0, EPCQ_CONTROLLER_0_AVL_MEM, EPCQ_CONTROLLER_0_AVL_CSR, epcq_controller_0); -ALTERA_UP_SD_CARD_AVALON_INTERFACE_MOD_INSTANCE ( ALTERA_UP_SD_CARD_AVALON_INTERFACE_0, Altera_UP_SD_Card_Avalon_Interface_0); I2C_OPENCORES_INSTANCE ( I2C_OPENCORES_0, i2c_opencores_0); /* @@ -95,8 +97,9 @@ void alt_irq_init ( const void* base ) void alt_sys_init( void ) { + ALTERA_AVALON_TIMER_INIT ( TIMER_0, timer_0); ALTERA_AVALON_JTAG_UART_INIT ( JTAG_UART_0, jtag_uart_0); + ALTERA_AVALON_SPI_INIT ( SPI_0, spi_0); ALTERA_EPCQ_CONTROLLER_MOD_INIT ( EPCQ_CONTROLLER_0, epcq_controller_0); - ALTERA_UP_SD_CARD_AVALON_INTERFACE_MOD_INIT ( ALTERA_UP_SD_CARD_AVALON_INTERFACE_0, Altera_UP_SD_Card_Avalon_Interface_0); I2C_OPENCORES_INIT ( I2C_OPENCORES_0, i2c_opencores_0); } diff --git a/software/sys_controller_bsp/libhal_bsp.a b/software/sys_controller_bsp/libhal_bsp.a index 842d71b..b4bab94 100644 Binary files a/software/sys_controller_bsp/libhal_bsp.a and b/software/sys_controller_bsp/libhal_bsp.a differ diff --git a/software/sys_controller_bsp/linker.h b/software/sys_controller_bsp/linker.h index 6c690c2..c045a5f 100644 --- a/software/sys_controller_bsp/linker.h +++ b/software/sys_controller_bsp/linker.h @@ -4,7 +4,7 @@ * Machine generated for CPU 'nios2_qsys_0' in SOPC Builder design 'sys' * SOPC Builder design path: ../../sys.sopcinfo * - * Generated: Sun May 03 12:35:19 EEST 2015 + * Generated: Sun Oct 16 12:18:06 EEST 2016 */ /* @@ -68,7 +68,7 @@ #define EPCQ_CONTROLLER_0_AVL_MEM_REGION_BASE 0x0 #define EPCQ_CONTROLLER_0_AVL_MEM_REGION_SPAN 8388608 #define ONCHIP_MEMORY2_0_REGION_BASE 0x810020 -#define ONCHIP_MEMORY2_0_REGION_SPAN 36832 +#define ONCHIP_MEMORY2_0_REGION_SPAN 40928 #define RESET_REGION_BASE 0x810000 #define RESET_REGION_SPAN 32 diff --git a/software/sys_controller_bsp/linker.x b/software/sys_controller_bsp/linker.x index 133a801..bb7d4db 100644 --- a/software/sys_controller_bsp/linker.x +++ b/software/sys_controller_bsp/linker.x @@ -4,7 +4,7 @@ * Machine generated for CPU 'nios2_qsys_0' in SOPC Builder design 'sys' * SOPC Builder design path: ../../sys.sopcinfo * - * Generated: Sun May 03 12:35:19 EEST 2015 + * Generated: Sun Oct 16 12:18:06 EEST 2016 */ /* @@ -52,7 +52,7 @@ MEMORY { epcq_controller_0_avl_mem : ORIGIN = 0x0, LENGTH = 8388608 reset : ORIGIN = 0x810000, LENGTH = 32 - onchip_memory2_0 : ORIGIN = 0x810020, LENGTH = 36832 + onchip_memory2_0 : ORIGIN = 0x810020, LENGTH = 40928 } /* Define symbols for each memory base-address */ @@ -386,7 +386,7 @@ SECTIONS /* * Don't override this, override the __alt_stack_* symbols instead. */ -__alt_data_end = 0x819000; +__alt_data_end = 0x81a000; /* * The next two symbols define the location of the default stack. You can @@ -402,4 +402,4 @@ PROVIDE( __alt_stack_limit = __alt_stack_base ); * Override this symbol to put the heap in a different memory. */ PROVIDE( __alt_heap_start = end ); -PROVIDE( __alt_heap_limit = 0x819000 ); +PROVIDE( __alt_heap_limit = 0x81a000 ); diff --git a/software/sys_controller_bsp/mem_init.mk b/software/sys_controller_bsp/mem_init.mk index 5f0d286..33caacc 100644 --- a/software/sys_controller_bsp/mem_init.mk +++ b/software/sys_controller_bsp/mem_init.mk @@ -199,8 +199,8 @@ HDL_SIM_INSTALL_FILES += $(HDL_SIM_INSTALL_DIR)/$(MEM_1).dat SYM_FILES += $(HDL_SIM_DIR)/$(MEM_1).sym HDL_SIM_INSTALL_FILES += $(HDL_SIM_INSTALL_DIR)/$(MEM_1).sym $(MEM_1)_START := 0x00810000 -$(MEM_1)_END := 0x00818fff -$(MEM_1)_SPAN := 0x00009000 +$(MEM_1)_END := 0x00819fff +$(MEM_1)_SPAN := 0x0000a000 $(MEM_1)_HIERARCHICAL_PATH := onchip_memory2_0 $(MEM_1)_WIDTH := 32 $(MEM_1)_HEX_DATA_WIDTH := 32 diff --git a/software/sys_controller_bsp/memory.gdb b/software/sys_controller_bsp/memory.gdb index a7365f0..41fd763 100644 --- a/software/sys_controller_bsp/memory.gdb +++ b/software/sys_controller_bsp/memory.gdb @@ -3,7 +3,7 @@ # Machine generated for CPU 'nios2_qsys_0' in SOPC Builder design 'sys' # SOPC Builder design path: ../../sys.sopcinfo # -# Generated: Sun May 03 12:35:19 EEST 2015 +# Generated: Sun Oct 16 12:18:06 EEST 2016 # DO NOT MODIFY THIS FILE # @@ -50,4 +50,4 @@ memory 0x0 0x800000 cache # onchip_memory2_0 -memory 0x810000 0x819000 cache +memory 0x810000 0x81a000 cache diff --git a/software/sys_controller_bsp/settings.bsp b/software/sys_controller_bsp/settings.bsp index 7cc67d7..43498a2 100644 --- a/software/sys_controller_bsp/settings.bsp +++ b/software/sys_controller_bsp/settings.bsp @@ -2,9 +2,9 @@ hal default - Sep 4, 2016 3:02:52 AM - 1472947372974 - ./ + Oct 16, 2016 12:18:06 PM + 1476609486611 + /home/markus/Code/ossc/software/sys_controller_bsp settings.bsp ../../sys.sopcinfo default @@ -894,67 +894,73 @@ onchip_memory2_0 - 0x00810000 - 0x00818FFF - 36864 + 0x00810000 - 0x00819FFF + 40960 memory - Altera_UP_SD_Card_Avalon_Interface_0 - 0x00821000 - 0x008213FF - 1024 + spi_0 + 0x00821000 - 0x0082101F + 32 + + timer_0 + 0x00821020 - 0x0082103F + 32 + timer + epcq_controller_0_avl_csr - 0x00821400 - 0x0082141F + 0x00821040 - 0x0082105F 32 i2c_opencores_0 - 0x00821420 - 0x0082143F + 0x00821060 - 0x0082107F 32 pio_5 - 0x00821440 - 0x0082144F + 0x00821080 - 0x0082108F 16 pio_4 - 0x00821450 - 0x0082145F + 0x00821090 - 0x0082109F 16 pio_3 - 0x00821460 - 0x0082146F + 0x008210A0 - 0x008210AF 16 pio_2 - 0x00821470 - 0x0082147F + 0x008210B0 - 0x008210BF 16 pio_1 - 0x00821480 - 0x0082148F + 0x008210C0 - 0x008210CF 16 pio_0 - 0x00821490 - 0x0082149F + 0x008210D0 - 0x008210DF 16 jtag_uart_0 - 0x008214A0 - 0x008214A7 + 0x008210E0 - 0x008210E7 8 printable diff --git a/software/sys_controller_bsp/system.h b/software/sys_controller_bsp/system.h index 385398c..c9356df 100644 --- a/software/sys_controller_bsp/system.h +++ b/software/sys_controller_bsp/system.h @@ -4,7 +4,7 @@ * Machine generated for CPU 'nios2_qsys_0' in SOPC Builder design 'sys' * SOPC Builder design path: ../../sys.sopcinfo * - * Generated: Wed Dec 30 21:04:43 EET 2015 + * Generated: Sun Oct 16 12:18:06 EEST 2016 */ /* @@ -55,20 +55,6 @@ #include "linker.h" -/* - * Altera_UP_SD_Card_Avalon_Interface_0 configuration - * - */ - -#define ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE 0x821000 -#define ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_IRQ -1 -#define ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_IRQ_INTERRUPT_CONTROLLER_ID -1 -#define ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_NAME "/dev/Altera_UP_SD_Card_Avalon_Interface_0" -#define ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_SPAN 1024 -#define ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_TYPE "Altera_UP_SD_Card_Avalon_Interface_mod" -#define ALT_MODULE_CLASS_Altera_UP_SD_Card_Avalon_Interface_0 Altera_UP_SD_Card_Avalon_Interface_mod - - /* * CPU configuration * @@ -164,11 +150,12 @@ #define __ALTERA_AVALON_JTAG_UART #define __ALTERA_AVALON_ONCHIP_MEMORY2 #define __ALTERA_AVALON_PIO +#define __ALTERA_AVALON_SPI +#define __ALTERA_AVALON_TIMER #define __ALTERA_EPCQ_CONTROLLER_MOD #define __ALTERA_NIOS2_GEN2 #define __ALTERA_NIOS_CUSTOM_INSTR_BITSWAP #define __ALTERA_NIOS_CUSTOM_INSTR_ENDIANCONVERTER -#define __ALTERA_UP_SD_CARD_AVALON_INTERFACE_MOD #define __I2C_OPENCORES #define __NIOS2_HW_CRC32 @@ -189,19 +176,19 @@ #define ALT_NUM_INTERNAL_INTERRUPT_CONTROLLERS 1 #define ALT_NUM_INTERRUPT_CONTROLLERS 1 #define ALT_STDERR "/dev/jtag_uart_0" -#define ALT_STDERR_BASE 0x8214a0 +#define ALT_STDERR_BASE 0x8210e0 #define ALT_STDERR_DEV jtag_uart_0 #define ALT_STDERR_IS_JTAG_UART #define ALT_STDERR_PRESENT #define ALT_STDERR_TYPE "altera_avalon_jtag_uart" #define ALT_STDIN "/dev/jtag_uart_0" -#define ALT_STDIN_BASE 0x8214a0 +#define ALT_STDIN_BASE 0x8210e0 #define ALT_STDIN_DEV jtag_uart_0 #define ALT_STDIN_IS_JTAG_UART #define ALT_STDIN_PRESENT #define ALT_STDIN_TYPE "altera_avalon_jtag_uart" #define ALT_STDOUT "/dev/jtag_uart_0" -#define ALT_STDOUT_BASE 0x8214a0 +#define ALT_STDOUT_BASE 0x8210e0 #define ALT_STDOUT_DEV jtag_uart_0 #define ALT_STDOUT_IS_JTAG_UART #define ALT_STDOUT_PRESENT @@ -215,9 +202,9 @@ */ #define ALT_MODULE_CLASS_epcq_controller_0_avl_csr altera_epcq_controller_mod -#define EPCQ_CONTROLLER_0_AVL_CSR_BASE 0x821400 +#define EPCQ_CONTROLLER_0_AVL_CSR_BASE 0x821040 #define EPCQ_CONTROLLER_0_AVL_CSR_FLASH_TYPE "EPCS64" -#define EPCQ_CONTROLLER_0_AVL_CSR_IRQ 1 +#define EPCQ_CONTROLLER_0_AVL_CSR_IRQ 2 #define EPCQ_CONTROLLER_0_AVL_CSR_IRQ_INTERRUPT_CONTROLLER_ID 0 #define EPCQ_CONTROLLER_0_AVL_CSR_IS_EPCS 1 #define EPCQ_CONTROLLER_0_AVL_CSR_NAME "/dev/epcq_controller_0_avl_csr" @@ -265,8 +252,8 @@ */ #define ALT_MODULE_CLASS_i2c_opencores_0 i2c_opencores -#define I2C_OPENCORES_0_BASE 0x821420 -#define I2C_OPENCORES_0_IRQ 0 +#define I2C_OPENCORES_0_BASE 0x821060 +#define I2C_OPENCORES_0_IRQ 3 #define I2C_OPENCORES_0_IRQ_INTERRUPT_CONTROLLER_ID 0 #define I2C_OPENCORES_0_NAME "/dev/i2c_opencores_0" #define I2C_OPENCORES_0_SPAN 32 @@ -279,8 +266,8 @@ */ #define ALT_MODULE_CLASS_jtag_uart_0 altera_avalon_jtag_uart -#define JTAG_UART_0_BASE 0x8214a0 -#define JTAG_UART_0_IRQ 2 +#define JTAG_UART_0_BASE 0x8210e0 +#define JTAG_UART_0_IRQ 1 #define JTAG_UART_0_IRQ_INTERRUPT_CONTROLLER_ID 0 #define JTAG_UART_0_NAME "/dev/jtag_uart_0" #define JTAG_UART_0_READ_DEPTH 64 @@ -314,8 +301,8 @@ #define ONCHIP_MEMORY2_0_READ_DURING_WRITE_MODE "DONT_CARE" #define ONCHIP_MEMORY2_0_SINGLE_CLOCK_OP 0 #define ONCHIP_MEMORY2_0_SIZE_MULTIPLE 1 -#define ONCHIP_MEMORY2_0_SIZE_VALUE 36864 -#define ONCHIP_MEMORY2_0_SPAN 36864 +#define ONCHIP_MEMORY2_0_SIZE_VALUE 40960 +#define ONCHIP_MEMORY2_0_SPAN 40960 #define ONCHIP_MEMORY2_0_TYPE "altera_avalon_onchip_memory2" #define ONCHIP_MEMORY2_0_WRITABLE 1 @@ -326,7 +313,7 @@ */ #define ALT_MODULE_CLASS_pio_0 altera_avalon_pio -#define PIO_0_BASE 0x821490 +#define PIO_0_BASE 0x8210d0 #define PIO_0_BIT_CLEARING_EDGE_REGISTER 0 #define PIO_0_BIT_MODIFYING_OUTPUT_REGISTER 0 #define PIO_0_CAPTURE 0 @@ -353,7 +340,7 @@ */ #define ALT_MODULE_CLASS_pio_1 altera_avalon_pio -#define PIO_1_BASE 0x821480 +#define PIO_1_BASE 0x8210c0 #define PIO_1_BIT_CLEARING_EDGE_REGISTER 0 #define PIO_1_BIT_MODIFYING_OUTPUT_REGISTER 0 #define PIO_1_CAPTURE 0 @@ -380,7 +367,7 @@ */ #define ALT_MODULE_CLASS_pio_2 altera_avalon_pio -#define PIO_2_BASE 0x821470 +#define PIO_2_BASE 0x8210b0 #define PIO_2_BIT_CLEARING_EDGE_REGISTER 0 #define PIO_2_BIT_MODIFYING_OUTPUT_REGISTER 0 #define PIO_2_CAPTURE 0 @@ -407,7 +394,7 @@ */ #define ALT_MODULE_CLASS_pio_3 altera_avalon_pio -#define PIO_3_BASE 0x821460 +#define PIO_3_BASE 0x8210a0 #define PIO_3_BIT_CLEARING_EDGE_REGISTER 0 #define PIO_3_BIT_MODIFYING_OUTPUT_REGISTER 0 #define PIO_3_CAPTURE 0 @@ -434,7 +421,7 @@ */ #define ALT_MODULE_CLASS_pio_4 altera_avalon_pio -#define PIO_4_BASE 0x821450 +#define PIO_4_BASE 0x821090 #define PIO_4_BIT_CLEARING_EDGE_REGISTER 0 #define PIO_4_BIT_MODIFYING_OUTPUT_REGISTER 0 #define PIO_4_CAPTURE 0 @@ -461,7 +448,7 @@ */ #define ALT_MODULE_CLASS_pio_5 altera_avalon_pio -#define PIO_5_BASE 0x821440 +#define PIO_5_BASE 0x821080 #define PIO_5_BIT_CLEARING_EDGE_REGISTER 0 #define PIO_5_BIT_MODIFYING_OUTPUT_REGISTER 0 #define PIO_5_CAPTURE 0 @@ -481,4 +468,61 @@ #define PIO_5_SPAN 16 #define PIO_5_TYPE "altera_avalon_pio" + +/* + * spi_0 configuration + * + */ + +#define ALT_MODULE_CLASS_spi_0 altera_avalon_spi +#define SPI_0_BASE 0x821000 +#define SPI_0_CLOCKMULT 1 +#define SPI_0_CLOCKPHASE 0 +#define SPI_0_CLOCKPOLARITY 0 +#define SPI_0_CLOCKUNITS "Hz" +#define SPI_0_DATABITS 8 +#define SPI_0_DATAWIDTH 16 +#define SPI_0_DELAYMULT "1.0E-9" +#define SPI_0_DELAYUNITS "ns" +#define SPI_0_EXTRADELAY 0 +#define SPI_0_INSERT_SYNC 0 +#define SPI_0_IRQ 4 +#define SPI_0_IRQ_INTERRUPT_CONTROLLER_ID 0 +#define SPI_0_ISMASTER 1 +#define SPI_0_LSBFIRST 0 +#define SPI_0_NAME "/dev/spi_0" +#define SPI_0_NUMSLAVES 1 +#define SPI_0_PREFIX "spi_" +#define SPI_0_SPAN 32 +#define SPI_0_SYNC_REG_DEPTH 2 +#define SPI_0_TARGETCLOCK 13500000u +#define SPI_0_TARGETSSDELAY "0.0" +#define SPI_0_TYPE "altera_avalon_spi" + + +/* + * timer_0 configuration + * + */ + +#define ALT_MODULE_CLASS_timer_0 altera_avalon_timer +#define TIMER_0_ALWAYS_RUN 0 +#define TIMER_0_BASE 0x821020 +#define TIMER_0_COUNTER_SIZE 32 +#define TIMER_0_FIXED_PERIOD 0 +#define TIMER_0_FREQ 27000000 +#define TIMER_0_IRQ 0 +#define TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID 0 +#define TIMER_0_LOAD_VALUE 26 +#define TIMER_0_MULT 1.0E-6 +#define TIMER_0_NAME "/dev/timer_0" +#define TIMER_0_PERIOD 1 +#define TIMER_0_PERIOD_UNITS "us" +#define TIMER_0_RESET_OUTPUT 0 +#define TIMER_0_SNAPSHOT 1 +#define TIMER_0_SPAN 32 +#define TIMER_0_TICKS_PER_SEC 1000000 +#define TIMER_0_TIMEOUT_PULSE_OUTPUT 0 +#define TIMER_0_TYPE "altera_avalon_timer" + #endif /* __SYSTEM_H_ */ diff --git a/sys.qsys b/sys.qsys index 65116c2..eac50d1 100644 --- a/sys.qsys +++ b/sys.qsys @@ -9,22 +9,6 @@ categories="System" /> - - - - @@ -391,7 +399,7 @@ - ]]> + ]]> @@ -430,14 +438,14 @@ - ]]> + ]]> - + @@ -578,7 +586,7 @@ - + @@ -674,22 +682,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + - + - + - + - + - + - + - + - + + + + + + + + + + + - + + - + - + - + + + + + + + - + + - + java.lang.Integer - 1472947093 + 1476609301 false true false @@ -95,602 +95,6 @@ true true - - - - java.lang.String - CYCLONEIVE - false - true - false - true - DEVICE_FAMILY - - - java.lang.Long - 27000000 - false - true - false - true - CLOCK_RATE - clk - - - java.lang.String - Cyclone IV E - false - true - false - true - DEVICE_FAMILY - - - boolean - false - false - true - true - true - - - - - embeddedsw.configuration.isFlash - 0 - - - embeddedsw.configuration.isMemoryDevice - 0 - - - embeddedsw.configuration.isNonVolatileStorage - 0 - - - embeddedsw.configuration.isPrintableDevice - 0 - - - com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment - DYNAMIC - false - true - false - true - - - int - 0 - false - true - false - true - - - java.math.BigInteger - 1024 - true - true - false - true - - - com.altera.sopcmodel.avalon.EAddrBurstUnits - WORDS - false - true - true - true - - - boolean - false - false - true - false - true - - - java.lang.String - clk - false - true - true - true - - - java.lang.String - reset - false - true - true - true - - - int - 8 - false - true - true - true - - - java.math.BigInteger - - false - true - false - true - - - com.altera.entityinterfaces.IConnectionPoint - - false - true - false - true - - - boolean - false - false - true - true - true - - - com.altera.sopcmodel.avalon.EAddrBurstUnits - WORDS - false - true - true - true - - - boolean - false - false - true - false - true - - - java.math.BigInteger - 0 - false - true - true - true - - - int - 0 - false - false - true - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - true - true - - - int - 0 - false - false - true - true - - - int - 0 - false - false - true - true - - - int - 1 - false - true - false - true - - - boolean - false - false - true - false - true - - - int - 0 - false - true - true - true - - - int - 1 - false - true - false - true - - - int - 1 - false - false - true - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - false - true - - - int - 0 - false - false - true - true - - - com.altera.sopcmodel.avalon.TimingUnits - Cycles - false - false - true - true - - - boolean - false - false - true - false - true - - - boolean - false - false - true - false - true - - - int - 0 - false - true - false - true - - - int - 0 - false - true - false - true - - - int - 0 - false - false - true - true - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - avalon - false - - i_avalon_chip_select - Input - 1 - chipselect - - - i_avalon_address - Input - 8 - address - - - i_avalon_read - Input - 1 - read - - - i_avalon_write - Input - 1 - write - - - i_avalon_byteenable - Input - 4 - byteenable - - - i_avalon_writedata - Input - 32 - writedata - - - o_avalon_readdata - Output - 32 - readdata - - - o_avalon_waitrequest - Output - 1 - waitrequest - - - - - - boolean - false - false - true - false - true - - - java.lang.String - - false - true - false - true - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - - java.lang.Boolean - true - true - true - false - true - - - java.lang.Long - 27000000 - true - true - false - true - - clock - false - - i_clock - Input - 1 - clk - - - - - - java.lang.String - clk - false - true - true - true - - - com.altera.sopcmodel.reset.Reset$Edges - DEASSERT - false - true - true - true - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - reset - false - - i_reset_n - Input - 1 - reset_n - - - - - - java.lang.String - - false - true - true - true - - - java.lang.String - - false - true - true - true - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - conduit - false - - b_SD_cmd - Bidir - 1 - export - - - b_SD_dat - Bidir - 1 - export - - - b_SD_dat3 - Bidir - 1 - export - - - o_SD_clock - Output - 1 - export - - - @@ -968,18 +372,24 @@ parameters are a RESULT of the module parameters. --> clk pio_4.clk - - false - Altera_UP_SD_Card_Avalon_Interface_0 - clk - Altera_UP_SD_Card_Avalon_Interface_0.clk - false pio_5 clk pio_5.clk + + false + timer_0 + clk + timer_0.clk + + + false + spi_0 + clk + spi_0.clk + false onchip_memory2_0 @@ -5351,7 +4761,7 @@ the requested settings for a module instance. --> java.lang.String - ]]> + ]]> false true false @@ -5371,7 +4781,7 @@ the requested settings for a module instance. --> java.lang.String - ]]> + ]]> false true false @@ -5500,7 +4910,7 @@ the requested settings for a module instance. --> long - 7 + 31 false true false @@ -6042,23 +5452,15 @@ parameters are a RESULT of the module parameters. --> jtag_uart_0 avalon_jtag_slave jtag_uart_0.avalon_jtag_slave - 8524960 + 8524000 8 - - false - Altera_UP_SD_Card_Avalon_Interface_0 - avalon_sdcard_slave - Altera_UP_SD_Card_Avalon_Interface_0.avalon_sdcard_slave - 8523776 - 1024 - false i2c_opencores_0 avalon_slave_0 i2c_opencores_0.avalon_slave_0 - 8524832 + 8523872 32 @@ -6066,7 +5468,7 @@ parameters are a RESULT of the module parameters. --> epcq_controller_0 avl_csr epcq_controller_0.avl_csr - 8524800 + 8523840 32 @@ -6091,14 +5493,14 @@ parameters are a RESULT of the module parameters. --> s1 onchip_memory2_0.s1 8454144 - 36864 + 40960 false pio_0 s1 pio_0.s1 - 8524944 + 8523984 16 @@ -6106,7 +5508,7 @@ parameters are a RESULT of the module parameters. --> pio_1 s1 pio_1.s1 - 8524928 + 8523968 16 @@ -6114,7 +5516,7 @@ parameters are a RESULT of the module parameters. --> pio_2 s1 pio_2.s1 - 8524912 + 8523952 16 @@ -6122,7 +5524,7 @@ parameters are a RESULT of the module parameters. --> pio_3 s1 pio_3.s1 - 8524896 + 8523936 16 @@ -6130,7 +5532,7 @@ parameters are a RESULT of the module parameters. --> pio_4 s1 pio_4.s1 - 8524880 + 8523920 16 @@ -6138,9 +5540,25 @@ parameters are a RESULT of the module parameters. --> pio_5 s1 pio_5.s1 - 8524864 + 8523904 16 + + false + timer_0 + s1 + timer_0.s1 + 8523808 + 32 + + + false + spi_0 + spi_control_port + spi_0.spi_control_port + 8523776 + 32 + s1 onchip_memory2_0.s1 8454144 - 36864 + 40960 @@ -6518,21 +5936,35 @@ parameters are a RESULT of the module parameters. --> i2c_opencores_0 interrupt_sender i2c_opencores_0.interrupt_sender - 0 + 3 false epcq_controller_0 interrupt_sender epcq_controller_0.interrupt_sender - 1 + 2 false jtag_uart_0 irq jtag_uart_0.irq - 2 + 1 + + + false + timer_0 + irq + timer_0.irq + 0 + + + false + spi_0 + irq + spi_0.irq + 4 @@ -7541,7 +6973,7 @@ the requested settings for a module instance. --> embeddedsw.CMacro.SIZE_VALUE - 36864 + 40960 embeddedsw.CMacro.WRITABLE @@ -7641,7 +7073,7 @@ the requested settings for a module instance. --> long - 36864 + 40960 false true true @@ -7901,7 +7333,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 36864 + 40960 true true false @@ -7989,7 +7421,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 36864 + 40960 false true true @@ -12900,6 +12332,1656 @@ parameters are a RESULT of the module parameters. --> + + + + embeddedsw.CMacro.CLOCKMULT + 1 + + + embeddedsw.CMacro.CLOCKPHASE + 0 + + + embeddedsw.CMacro.CLOCKPOLARITY + 0 + + + embeddedsw.CMacro.CLOCKUNITS + "Hz" + + + embeddedsw.CMacro.DATABITS + 8 + + + embeddedsw.CMacro.DATAWIDTH + 16 + + + embeddedsw.CMacro.DELAYMULT + "1.0E-9" + + + embeddedsw.CMacro.DELAYUNITS + "ns" + + + embeddedsw.CMacro.EXTRADELAY + 0 + + + embeddedsw.CMacro.INSERT_SYNC + 0 + + + embeddedsw.CMacro.ISMASTER + 1 + + + embeddedsw.CMacro.LSBFIRST + 0 + + + embeddedsw.CMacro.NUMSLAVES + 1 + + + embeddedsw.CMacro.PREFIX + "spi_" + + + embeddedsw.CMacro.SYNC_REG_DEPTH + 2 + + + embeddedsw.CMacro.TARGETCLOCK + 13500000u + + + embeddedsw.CMacro.TARGETSSDELAY + "0.0" + + + embeddedsw.dts.compatible + altr,spi-1.0 + + + embeddedsw.dts.group + spi + + + embeddedsw.dts.name + spi + + + embeddedsw.dts.vendor + altr + + + int + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 8 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + true + false + true + true + true + + + int + 1 + false + true + true + true + + + int + 2 + false + false + true + true + + + long + 13500000 + false + true + true + true + + + double + 0.0 + false + false + true + true + + + java.lang.String + 2.0 + false + true + false + true + AVALON_SPEC + + + long + 27000000 + false + true + false + true + CLOCK_RATE + clk + + + double + 1.35E7 + true + true + true + true + + + double + 0.0 + true + false + true + true + + + boolean + false + true + true + false + true + + + int + 16 + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 27000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 8 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + data_from_cpu + Input + 16 + writedata + + + data_to_cpu + Output + 16 + readdata + + + mem_addr + Input + 3 + address + + + read_n + Input + 1 + read_n + + + spi_select + Input + 1 + chipselect + + + write_n + Input + 1 + write_n + + + + + + com.altera.entityinterfaces.IConnectionPoint + spi_0.spi_control_port + false + true + true + true + + + java.lang.String + clk + false + true + false + true + + + java.lang.String + reset + false + true + false + true + + + java.lang.Integer + + false + true + true + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + true + true + + + com.altera.sopcmodel.interrupt.InterruptConnectionPoint$EIrqScheme + NONE + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + interrupt + false + + irq + Output + 1 + irq + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + MISO + Input + 1 + export + + + MOSI + Output + 1 + export + + + SCLK + Output + 1 + export + + + SS_n + Output + 1 + export + + + + + + + embeddedsw.CMacro.ALWAYS_RUN + 0 + + + embeddedsw.CMacro.COUNTER_SIZE + 32 + + + embeddedsw.CMacro.FIXED_PERIOD + 0 + + + embeddedsw.CMacro.FREQ + 27000000 + + + embeddedsw.CMacro.LOAD_VALUE + 26 + + + embeddedsw.CMacro.MULT + 0.000001 + + + embeddedsw.CMacro.PERIOD + 1 + + + embeddedsw.CMacro.PERIOD_UNITS + us + + + embeddedsw.CMacro.RESET_OUTPUT + 0 + + + embeddedsw.CMacro.SNAPSHOT + 1 + + + embeddedsw.CMacro.TICKS_PER_SEC + 1000000 + + + embeddedsw.CMacro.TIMEOUT_PULSE_OUTPUT + 0 + + + embeddedsw.dts.compatible + altr,timer-1.0 + + + embeddedsw.dts.group + timer + + + embeddedsw.dts.name + timer + + + embeddedsw.dts.params.clock-frequency + 27000000 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + true + true + true + + + int + 32 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + 1 + false + true + true + true + + + java.lang.String + USEC + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + long + 27000000 + false + true + false + true + CLOCK_RATE + clk + + + int + 2 + false + true + false + true + + + java.lang.String + FULL_FEATURED + true + true + false + true + + + java.lang.String + us + true + true + false + true + + + double + 1.0E-6 + true + true + false + true + + + java.lang.String + 26 + true + true + false + true + + + double + 1.0E-6 + true + true + false + true + + + double + 1000000.0 + true + true + false + true + + + int + 3 + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 27000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + embeddedsw.configuration.isTimerDevice + 1 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 8 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 3 + address + + + writedata + Input + 16 + writedata + + + readdata + Output + 16 + readdata + + + chipselect + Input + 1 + chipselect + + + write_n + Input + 1 + write_n + + + + + + com.altera.entityinterfaces.IConnectionPoint + timer_0.s1 + false + true + true + true + + + java.lang.String + clk + false + true + false + true + + + java.lang.String + reset + false + true + false + true + + + java.lang.Integer + + false + true + true + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + true + true + + + com.altera.sopcmodel.interrupt.InterruptConnectionPoint$EIrqScheme + NONE + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + interrupt + false + + irq + Output + 1 + irq + + + java.math.BigInteger - 0x008214a0 + 0x008210e0 false true true @@ -12951,57 +14033,6 @@ parameters are a RESULT of the module parameters. --> jtag_uart_0 avalon_jtag_slave - - - int - 1 - false - true - true - true - - - java.math.BigInteger - 0x00821000 - false - true - true - true - - - boolean - false - false - true - true - true - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - nios2_qsys_0 - data_master - Altera_UP_SD_Card_Avalon_Interface_0 - avalon_sdcard_slave - java.math.BigInteger - 0x00821420 + 0x00821060 false true true @@ -13069,7 +14100,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821400 + 0x00821040 false true true @@ -13273,7 +14304,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821490 + 0x008210d0 false true true @@ -13324,7 +14355,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821480 + 0x008210c0 false true true @@ -13375,7 +14406,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821470 + 0x008210b0 false true true @@ -13426,7 +14457,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821460 + 0x008210a0 false true true @@ -13477,7 +14508,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821450 + 0x00821090 false true true @@ -13528,7 +14559,7 @@ parameters are a RESULT of the module parameters. --> java.math.BigInteger - 0x00821440 + 0x00821080 false true true @@ -13563,6 +14594,108 @@ parameters are a RESULT of the module parameters. --> pio_5 s1 + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x00821020 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + nios2_qsys_0 + data_master + timer_0 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x00821000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + nios2_qsys_0 + data_master + spi_0 + spi_control_port + pio_4 clk - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - clk_27 - clk - Altera_UP_SD_Card_Avalon_Interface_0 - clk - pio_5 clk + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_27 + clk + timer_0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_27 + clk + spi_0 + clk + end="i2c_opencores_0.interrupt_sender"> int - 0 + 3 false true true @@ -14032,7 +15192,7 @@ parameters are a RESULT of the module parameters. --> end="epcq_controller_0.interrupt_sender"> int - 1 + 2 false true true @@ -14067,7 +15227,7 @@ parameters are a RESULT of the module parameters. --> end="jtag_uart_0.irq"> int - 2 + 1 false true true @@ -14094,6 +15254,76 @@ parameters are a RESULT of the module parameters. --> jtag_uart_0 irq + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + nios2_qsys_0 + irq + timer_0 + irq + + + + int + 4 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + nios2_qsys_0 + irq + spi_0 + irq + pio_4 reset - - - java.lang.String - UNKNOWN - false - true - true - true - - - boolean - false - false - true - true - true - - clk_27 - clk_reset - Altera_UP_SD_Card_Avalon_Interface_0 - reset - pio_5 reset + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_27 + clk_reset + timer_0 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_27 + clk_reset + spi_0 + reset + onchip_memory2_0 reset1 - - 1 - Altera_UP_SD_Card_Avalon_Interface_mod - com.altera.entityinterfaces.IElementClass - com.altera.entityinterfaces.IModule - SD Card Interface - 15.1 - - - 13 - avalon_slave - com.altera.entityinterfaces.IElementClass - com.altera.entityinterfaces.IMutableConnectionPoint - Avalon Memory Mapped Slave - 15.1 - - - 12 - clock_sink - com.altera.entityinterfaces.IElementClass - com.altera.entityinterfaces.IMutableConnectionPoint - Clock Input - 15.1 - - - 12 - reset_sink - com.altera.entityinterfaces.IElementClass - com.altera.entityinterfaces.IMutableConnectionPoint - Reset Input - 15.1 - - - 8 - conduit_end - com.altera.entityinterfaces.IElementClass - com.altera.entityinterfaces.IMutableConnectionPoint - Conduit - 15.1 - 1 clock_source @@ -14708,7 +15925,31 @@ parameters are a RESULT of the module parameters. --> 15.1 - 3 + 13 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 15.1 + + + 13 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 15.1 + + + 14 + avalon_slave + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Memory Mapped Slave + 15.1 + + + 5 interrupt_sender com.altera.entityinterfaces.IElementClass com.altera.entityinterfaces.IMutableConnectionPoint @@ -14723,6 +15964,14 @@ parameters are a RESULT of the module parameters. --> I2C Master (opencores.org) 13.0 + + 8 + conduit_end + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Conduit + 15.1 + 1 altera_avalon_jtag_uart @@ -14820,7 +16069,23 @@ parameters are a RESULT of the module parameters. --> 15.1 - 15 + 1 + altera_avalon_spi + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + SPI (3 Wire Serial) + 15.1 + + + 1 + altera_avalon_timer + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Interval Timer + 15.1 + + + 16 avalon com.altera.entityinterfaces.IElementClass com.altera.entityinterfaces.IConnection @@ -14828,7 +16093,7 @@ parameters are a RESULT of the module parameters. --> 15.1 - 12 + 13 clock com.altera.entityinterfaces.IElementClass com.altera.entityinterfaces.IConnection @@ -14836,7 +16101,7 @@ parameters are a RESULT of the module parameters. --> 15.1 - 3 + 5 interrupt com.altera.entityinterfaces.IElementClass com.altera.entityinterfaces.IConnection @@ -14852,7 +16117,7 @@ parameters are a RESULT of the module parameters. --> 15.1 - 12 + 13 reset com.altera.entityinterfaces.IElementClass com.altera.entityinterfaces.IConnection