📄 usb_new_pck_setup.vhdl
字号:
------------------------------------------------------------------------------------
---- File >>> usb_new_pck_setup.vhdl
---- Iden >>> 970613-15:59:12
----
---- Project: USB Development
---- Customer: Philips_ITCL
----
---- VHDL Design Unit: package PCK_SETUP
---- Written by: Geert Verbruggen
---- Easics nv
---- http://www.easics.com
---- mailto: vhdl@easics.be
----
---- Creation Date: Fri, 13 Jun 1997
----
---- Purpose:
----
---- Revision history:
----
------------------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
library work;
use work.PCK_GENERAL.all;
use work.PCK_USB.all;
use work.PCK_CONFIGURATION.all;
package PCK_SETUP is
-- Endpoint Configurations for USB and physical endpoints
constant USBEndpointSetup: T_USBEndpointSetup := GetUSBEndpointSetup;
constant USBOutEndpointType: T_USBEPType := USBEndpointSetup.OUTEP.EndpointType;
constant USBInEndpointType: T_USBEPType := USBEndpointSetup.INEP.EndpointType;
constant USBOutPhysEP: T_USBPhysEndpoint := USBEndpointSetup.OUTEP.PhysEndpoint;
constant USBInPhysEP: T_USBPhysEndpoint := USBEndpointSetup.INEP.PhysEndpoint;
constant USBOutHandler: T_USBHandler := USBEndpointSetup.OUTEP.Handler;
constant USBInHandler: T_USBHandler := USBEndpointSetup.INEP.Handler;
constant USBOutBufferSize: T_USBBufferSize := USBEndpointSetup.OUTEP.BufferSize;
constant USBInBufferSize: T_USBBufferSize := USBEndpointSetup.INEP.BufferSize;
-- boolean vectors for pin configuration and register configuration bits
subtype S_PINConfigArray is booleans(PINCONFIG_Range-1 downto 0);
subtype S_UCConfigArray is booleans(UCCONFIG_Range-1 downto 0);
-- Definition of interrupt register
subtype S_IntrBools is booleans(N_INTR_BITS-1 downto 0);
subtype S_IntrBits is unsigned(N_INTR_BITS-1 downto 0);
subtype S_IntrBitsRange is integer range 0 to N_INTR_BITS-1;
-- Definition of ChipID
subtype S_ChipID is unsigned(CHIPID_WIDTH-1 downto 0);
----------------------------------------------------------------
-- Embedded Port Status and port Status Change
----------------------------------------------------------------
subtype S_HubPortStatus is T_HubPortStatus_array(0 to N_DOWNSTREAM_PORTS-1);
subtype S_HubPortStatusChange is T_HubPortStatusChange_array(0 to N_DOWNSTREAM_PORTS-1);
subtype S_EmbPortStatus is T_EmbPortStatus_array(0 to N_EMBEDDED_PORTS-1);
subtype S_EmbPortStatusChange is T_EmbPortStatusChange_array(0 to N_EMBEDDED_PORTS-1);
------------------------------------------------------------------
------------------------------------------------------------------
-- Endpoint capabilities as a function of USB --
-- device, Endpoint and Direction --
------------------------------------------------------------------
------------------------------------------------------------------
function OutEndpointEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean;
function InEndpointEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean;
function OutSetupEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean;
function OutIsoEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean;
function InIsoEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean;
function OutEpType(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return T_EndpointType_enum;
function InEpType(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return T_EndpointType_enum;
------------------------------------------------------------------
------------------------------------------------------------------
-- Endpoint properties as a function of USB --
-- device, Endpoint and Direction --
------------------------------------------------------------------
------------------------------------------------------------------
function OutBufferSize(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_BufferSizeRange;
function InBufferSize(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_BufferSizeRange;
------------------------------------------------------------------
------------------------------------------------------------------
-- Mapping from USB Device, Endpoint, Direction to --
-- Physical endpoint --
------------------------------------------------------------------
------------------------------------------------------------------
function OutPhysEndpoint(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_PhysEndpointRange;
function InPhysEndpoint(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_PhysEndpointRange;
function OutHandler(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_HandlerRange;
function InHandler(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_HandlerRange;
------------------------------------------------------------------
------------------------------------------------------------------
-- Several Constants --
------------------------------------------------------------------
------------------------------------------------------------------
-- Endpoint Status Byte
constant EPSTAT_USB_BUFFER: integer := 0;
constant EPSTAT_UC_BUFFER: integer := 1;
constant EPSTAT_B0_SETUP: integer := 2;
constant EPSTAT_B1_SETUP: integer := 3;
constant EPSTAT_NEXT_PID: integer := 4;
constant EPSTAT_B0_FULL: integer := 5;
constant EPSTAT_B1_FULL: integer := 6;
constant EPSTAT_STALLED: integer := 7;
-- Transaction Status Byte
constant TRSTAT_SUCCES: integer := 0;
constant TRSTAT_ERROR_LOW: integer := 1;
constant TRSTAT_ERROR_HIGH: integer := 4;
constant TRSTAT_SETUP: integer := 5;
constant TRSTAT_PID: integer := 6;
constant TRSTAT_NOT_READ: integer := 7;
end PCK_SETUP;
package body PCK_SETUP is
------------------------------------------------------------------
-- Endpoint capabilities as a function of USB --
-- device, Endpoint and Direction --
------------------------------------------------------------------
function OutEndpointEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutEndpointType(EPConfiguration)(USBDevice)(USBEndpoint) /= UNUSED;
end OutEndpointEnabled;
function InEndpointEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBInEndpointType(EPConfiguration)(USBDevice)(USBEndpoint) /= UNUSED;
end InEndpointEnabled;
function OutSetupEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutEndpointType(EPConfiguration)(USBDevice)(USBEndpoint) = CONTROL;
end OutSetupEnabled;
function OutIsoEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutEndpointType(EPConfiguration)(USBDevice)(USBEndpoint) = ISOCHRONOUS;
end OutIsoEnabled;
function InIsoEnabled(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return boolean is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBInEndpointType(EPConfiguration)(USBDevice)(USBEndpoint) = ISOCHRONOUS;
end InIsoEnabled;
function OutEpType(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return T_EndpointType_enum is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutEndpointType(EPConfiguration)(USBDevice)(USBEndpoint);
end OutEPType;
function InEpType(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return T_EndpointType_enum is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBInEndpointType(EPConfiguration)(USBDevice)(USBEndpoint);
end InEPType;
------------------------------------------------------------------
-- Endpoint properties as a function of USB --
-- device, Endpoint and Direction --
------------------------------------------------------------------
function OutBufferSize(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_BufferSizeRange is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutBufferSize(EPConfiguration)(USBDevice)(USBEndpoint);
end OutBufferSize;
function InBufferSize(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_BufferSizeRange is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBInBufferSize(EPConfiguration)(USBDevice)(USBEndpoint);
end InBufferSize;
------------------------------------------------------------------
-- Mapping from USB Device, Endpoint, Direction to --
-- Physical endpoint --
------------------------------------------------------------------
function OutPhysEndpoint(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_PhysEndpointRange is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutPhysEP(EPConfiguration)(USBDevice)(USBEndpoint);
end OutPhysEndpoint;
function InPhysEndpoint(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_PhysEndpointRange is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBInPhysEP(EPConfiguration)(USBDevice)(USBEndpoint);
end InPhysEndpoint;
function OutHandler(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_HandlerRange is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBOutHandler(EPConfiguration)(USBDevice)(USBEndpoint);
end OutHandler;
function InHandler(USBDevice: S_USBDeviceRange;
USBEndpoint: S_USBEndpointRange;
Config: S_ConfigArray) return S_HandlerRange is
variable EPConfiguration: S_ConfigurationRange;
begin
EPConfiguration := GetConfiguration(Config);
return USBInHandler(EPConfiguration)(USBDevice)(USBEndpoint);
end InHandler;
end PCK_SETUP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -