⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbmain.c

📁 在CCS开发环境下的DSP 5509A的固件程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************/
/* 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 + -