📄 usbmain.c
字号:
/******************************************************************************/
/* Copyright (C) 2001 Texas Instruments, Inc. All Rights Reserved. */
/* */
/* File Name : usbmain.c */
/* Project : TMS320VC5509 USB Module Support */
/* Author : C5000 H/W Applications */
/* */
/* Version : 0.1 */
/* */
/* Description : Main routine for 5509 USB demo application */
/* Details description of the code execution flow is included */
/* in the readme.txt file */
/* */
/* Created on : 30 Apr 2001 */
/* */
/* Updates : */
/* */
/* 17 May 2001 $MH$ */
/* Added isochronous and host dma features */
/* */
/* 18 Jul 2001 $MH$ */
/* Replaced USB_setParams with USB_init API */
/* */
/* 28 Sep 2001 $MH$ */
/* Added USB_ISR */
/* */
/******************************************************************************/
#include "csl_std.h"
#include "csl_usb.h"
/******************************************************************************/
/* Define Interrupt Flag and Interrupt Mask Registers */
/* */
/******************************************************************************/
#define IER0_ADDR 0x0000
#define IER0 *(volatile unsigned int*)IER0_ADDR
#define IFR0_ADDR 0x0001
#define IFR0 *(volatile unsigned int*)IFR0_ADDR
#define IER1_ADDR 0x0045
#define IER1 *(volatile unsigned int*)IER1_ADDR
#define IFR1_ADDR 0x0046
#define IFR1 *(volatile unsigned int*)IFR1_ADDR
#define IVPD_ADDR 0x0049
#define IVPD *(volatile unsigned int*)IVPD_ADDR
#define IVPH_ADDR 0x004a
#define IVPH *(volatile unsigned int*)IVPH_ADDR
/******************************************************************************/
/* Symbolic Constants */
/* */
/******************************************************************************/
#define IER0_USBMSK 0x0100 // mask for USB intrpt
#define IFR0_USBMSK 0x0100 // mask for USB intrpt
/******************************************************************************/
/* INTR_ENABLE - enables all masked interrupts by resetting INTM */
/* bit in Status Register 1 */
/******************************************************************************/
#define INTR_GLOBAL_ENABLE \
asm(" bit(st1, #st1_intm) = #0");
/******************************************************************************/
/* INTR_DISABLE - disables all masked interrupts by setting INTM */
/* bit in Status Register 1 */
/******************************************************************************/
#define INTR_GLOBAL_DISABLE \
asm(" bit(st1, #st1_intm) = #1");
/******************************************************************************/
/* CLOCK MODE REGISTER */
/* Defined for C55XX */
/******************************************************************************/
#define CLKMD_ADDR 0x1C00
#define CLKMD *(ioport volatile unsigned int *)CLKMD_ADDR
/******************************************************************************/
/* Data bitfields for Clock Mode Register (CLKMD) */
/* */
/******************************************************************************/
#define IAI 14
#define IOB 13
#define PLL_MULT 7
#define PLL_DIV 5
#define PLL_ENABLE 4
#define BYPASS_DIV 2
#define BREAKLN 1
#define LOCK 0
/******************************************************************************/
/* Prototype: DSP Clock Init Function */
/* */
/******************************************************************************/
void dspclk_init(Uint16 inclk, Uint16 outclk, Uint16 plldiv);
/******************************************************************************/
/* DSP Interrupt Vector Table base address */
/* */
/******************************************************************************/
extern void RESET_VEC();
/******************************************************************************/
/* Endpoint Objects */
/* */
/******************************************************************************/
extern USB_EpObj usbEpObjOut0, usbEpObjIn0; // Control Endpoint Objects
USB_EpObj usbEpObjOut2, usbEpObjIn2; // Bulk endpoint objects
USB_EpObj usbEpObjIn3; // Interrupt endpoint object
USB_EpObj usbEpObjOut4, usbEpObjIn4; // Bulk endpoint objects for
// host dma operation
USB_EpObj usbEpObjIn5; // Iso endpoint object
/******************************************************************************/
/* Prototype: Endpoint Event Handler */
/* */
/******************************************************************************/
extern void USB_ctl_handler(); // Control Endpoint Event handler
void USB_bulkOutEvHandler(); // Endpoint2 OUT event handler
// Endpoint2 OUT data buffer handler
void USB_bulkOutDatHandler(USB_EpHandle hEpIn, USB_EpHandle hEpOut);
void USB_bulkInEvHandler(); // Endpoint2 IN event handler
// Endpoint2 IN data buffer handler
void USB_bulkInDatHandler(USB_EpHandle hEpIn, USB_EpHandle hEpOut);
void USB_endpt3EvHandler(); // Endpoint3 IN event handle
// Endpoint3 IN data buffer handler
void USB_endpt3DatHandler(USB_EpHandle hEpIn);
void USB_isoInEvHandler(); // Endpoint5 IN event handle
// Endpoint5 IN data buffer handler
void USB_isoInDatHandler(USB_EpHandle hEpIn);
/******************************************************************************/
/* Prototype: USB Interrupt Handler */
/* */
/******************************************************************************/
interrupt void USB_ISR(void);
/******************************************************************************/
/* Endpoint Data Buffers */
/* */
/******************************************************************************/
Uint16 Endpt2Buff[33]; // bulk endpt, 64 bytes, uninitialized
// intrpt endpt, 16 bytes, initialized
Uint16 Endpt3Buff[9] = {0, 0x0102, 0x0304, 0x0506, 0x0708,
0x090A, 0x0B0C, 0x0D0E, 0x0F10};
Uint16 Endpt5Buff[9]; // iso endpt, 16 bytes, uninitialized
/******************************************************************************/
/* USB Configuration */
/* */
/******************************************************************************/
//USB_EpHandle myUsbConfig[] = {&usbEpObjOut0, &usbEpObjIn0, &usbEpObjOut2,
// &usbEpObjIn2, &usbEpObjIn3, NULL};
USB_EpHandle myUsbConfig[] = {&usbEpObjOut0, &usbEpObjIn0, &usbEpObjOut2,
&usbEpObjIn2, &usbEpObjIn3, &usbEpObjOut4,
&usbEpObjIn4, &usbEpObjIn5, NULL};
/******************************************************************************/
/* main() */
/* */
/******************************************************************************/
void main(void)
{
USB_Boolean usb_status;
Uint16 event_mask;
Uint16 ii;
// initialize preliminary setup
// if using DSP/BIOS, DSP clock will be set by DSP/BIOS
dspclk_init(12, 96, 0); // init DSP clock
// IMPORTANT:API vector address must be initialized before calling any USB API
USB_setAPIVectorAddress(); // Enable USB module, initialize USB API
// vector base address
USB_initPLL(12, 48, 0); // init USB clock
// initialize endpoint objects
// endpoint object initialization is not necessary if CCS config tools used.
// CCS config tools initilize the endpoint objects statically
// init endpoint 0 objects
// endpoint out0 will respond to following events.
event_mask = USB_EVENT_RESET | USB_EVENT_SETUP | USB_EVENT_SUSPEND |
USB_EVENT_RESUME | USB_EVENT_EOT;
usb_status = USB_initEndptObj(USB0, &usbEpObjOut0, USB_OUT_EP0, USB_CTRL,
0x40, event_mask, USB_ctl_handler);
usb_status = USB_initEndptObj(USB0, &usbEpObjIn0, USB_IN_EP0, USB_CTRL,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -