diff options
Diffstat (limited to 'libmaple/usb')
| -rw-r--r-- | libmaple/usb/usb.c | 4 | ||||
| -rw-r--r-- | libmaple/usb/usb_callbacks.c | 5 | ||||
| -rw-r--r-- | libmaple/usb/usb_hardware.c | 96 | ||||
| -rw-r--r-- | libmaple/usb/usb_hardware.h | 121 | 
4 files changed, 6 insertions, 220 deletions
| diff --git a/libmaple/usb/usb.c b/libmaple/usb/usb.c index 173673e..1754360 100644 --- a/libmaple/usb/usb.c +++ b/libmaple/usb/usb.c @@ -34,9 +34,9 @@  #include "libmaple.h"  #include "usb_lib.h"  #include "gpio.h" -#include "usb_hardware.h"  #include "delay.h"  #include "nvic.h" +#include "rcc.h"  #include "usb_config.h"  #include "usb_callbacks.h" @@ -104,7 +104,7 @@ void usb_cdcacm_enable(gpio_dev *disc_dev, uint8 disc_bit) {    gpio_set_mode(disc_dev, disc_bit, GPIO_OUTPUT_PP);    /* setup the apb1 clock for USB */ -  pRCC->APB1ENR |= 0x00800000; +  RCC_BASE->APB1ENR |= 0x00800000;    /* initialize the usb application */    gpio_write_bit(disc_dev, disc_bit, 0); // presents us to the host diff --git a/libmaple/usb/usb_callbacks.c b/libmaple/usb/usb_callbacks.c index b2edd8a..72f97ad 100644 --- a/libmaple/usb/usb_callbacks.c +++ b/libmaple/usb/usb_callbacks.c @@ -7,7 +7,10 @@  #include "descriptors.h"  #include "usb_config.h"  #include "usb.h" -#include "usb_hardware.h" + +/* macro'd register and peripheral definitions */ +#define EXC_RETURN 0xFFFFFFF9 +#define DEFAULT_CPSR 0x61000000  ONE_DESCRIPTOR Device_Descriptor = {      (uint8*)&usbVcomDescriptor_Device, diff --git a/libmaple/usb/usb_hardware.c b/libmaple/usb/usb_hardware.c deleted file mode 100644 index e7fd078..0000000 --- a/libmaple/usb/usb_hardware.c +++ /dev/null @@ -1,96 +0,0 @@ -/****************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * 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. - *****************************************************************************/ - -/** - *  @file usb_hardware.c - * - *  @brief init routines to setup clocks and interrupts for usb. - * - */ - -#include "nvic.h" -#include "usb_hardware.h" - -void nvicInit(NVIC_InitTypeDef* NVIC_InitStruct) { -    u32 tmppriority = 0x00; -    u32 tmpreg      = 0x00; -    u32 tmpmask     = 0x00; -    u32 tmppre      = 0; -    u32 tmpsub      = 0x0F; - -    SCB_TypeDef* rSCB = (SCB_TypeDef *) SCB_BASE_ADDR; - -    /* Compute the Corresponding IRQ Priority -------------------------------*/ -    tmppriority = (0x700 - (rSCB->AIRCR & (u32)0x700))>> 0x08; -    tmppre = (0x4 - tmppriority); -    tmpsub = tmpsub >> tmppriority; - -    tmppriority = (u32)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << -        tmppre; -    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub; - -    tmppriority = tmppriority << 0x04; -    tmppriority = ((u32)tmppriority) << -        ((NVIC_InitStruct->NVIC_IRQChannel & (u8)0x03) * 0x08); - -    tmpreg = NVIC_BASE->IP[(NVIC_InitStruct->NVIC_IRQChannel >> 0x02)]; -    tmpmask = (u32)0xFF << -        ((NVIC_InitStruct->NVIC_IRQChannel & (u8)0x03) * 0x08); -    tmpreg &= ~tmpmask; -    tmppriority &= tmpmask; -    tmpreg |= tmppriority; - -    NVIC_BASE->IP[(NVIC_InitStruct->NVIC_IRQChannel >> 0x02)] = tmpreg; - -    /* Enable the Selected IRQ Channels -------------------------------------*/ -    NVIC_BASE->ISER[(NVIC_InitStruct->NVIC_IRQChannel >> 0x05)] = -        (u32)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (u8)0x1F); -} - -void nvicDisableInterrupts() { -    nvic_irq_disable_all(); -    NVIC_BASE->ICPR[0] = 0xFFFFFFFF; -    NVIC_BASE->ICPR[1] = 0xFFFFFFFF; - -    /* Disable the systick timer, which operates separately from NVIC */ -    SET_REG(STK_CTRL,0x04); -} - -void systemHardReset(void) { -    SCB_TypeDef* rSCB = (SCB_TypeDef *) SCB_BASE_ADDR; -    typedef void (*funcPtr)(void); - -    /* Reset */ -    rSCB->AIRCR = (u32)AIRCR_RESET_REQ; - -    /* Should never get here */ -    while (1) { -        asm volatile("nop"); -    } -} - - - diff --git a/libmaple/usb/usb_hardware.h b/libmaple/usb/usb_hardware.h deleted file mode 100644 index 6f347bb..0000000 --- a/libmaple/usb/usb_hardware.h +++ /dev/null @@ -1,121 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * 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. - * ****************************************************************************/ - -#include "rcc.h" -#include "usb_type.h" - -#ifndef _USB_HARDWARE_H_ -#define _USB_HARDWARE_H_ - -/* macro'd register and peripheral definitions */ -#define EXC_RETURN 0xFFFFFFF9 -#define DEFAULT_CPSR 0x61000000 - -#define FLASH ((u32)0x40022000) - -#define USB_PACKET_BUFFER ((u32)0x40006000) - -#define SCS_BASE_ADDR   ((u32)0xE000E000) -#define SCB_BASE_ADDR   (SCS_BASE_ADDR + 0x0D00) - -#define SCS      0xE000E000 -#define NVIC     (SCS+0x100) -#define SCB      (SCS+0xD00) -#define STK      (SCS+0x10) - -#define SCB_VTOR (SCB+0x08) -#define STK_CTRL (STK+0x00) - -#define USB_HP_IRQ  ((u8)0x13) -#define USB_LP_IRQ  ((u8)0x14) - -/* AIRCR  */ -#define AIRCR_RESET         0x05FA0000 -#define AIRCR_RESET_REQ     (AIRCR_RESET | (u32)0x04); - -/* temporary copyage of example from kiel */ -#define __VAL(__TIMCLK, __PERIOD) ((__TIMCLK/1000000UL)*__PERIOD) -#define __PSC(__TIMCLK, __PERIOD)  (((__VAL(__TIMCLK, __PERIOD)+49999UL)/50000UL) - 1) -#define __ARR(__TIMCLK, __PERIOD) ((__VAL(__TIMCLK, __PERIOD)/(__PSC(__TIMCLK, __PERIOD)+1)) - 1) - -#define SET_REG(addr,val)  do { *(vu32*)(addr)=val; } while (0) -#define GET_REG(addr)      do { *(vu32*)(addr); } while (0) - -#if defined(__cplusplus) -extern "C" { -#endif - -/* todo: there must be some major misunderstanding in how we access regs. The direct access approach (GET_REG) -   causes the usb init to fail upon trying to activate RCC_APB1 |= 0x00800000. However, using the struct approach -   from ST, it works fine...temporarily switching to that approach */ -typedef struct -{ -  vu32 CR; -  vu32 CFGR; -  vu32 CIR; -  vu32 APB2RSTR; -  vu32 APB1RSTR; -  vu32 AHBENR; -  vu32 APB2ENR; -  vu32 APB1ENR; -  vu32 BDCR; -  vu32 CSR; -} RCC_RegStruct; -#define pRCC ((RCC_RegStruct *) RCC_BASE) - -typedef struct { -  u8 NVIC_IRQChannel; -  u8 NVIC_IRQChannelPreemptionPriority; -  u8 NVIC_IRQChannelSubPriority; -  USB_Bool NVIC_IRQChannelCmd; /* TRUE for enable */ -} NVIC_InitTypeDef; - -typedef struct { -  vuc32 CPUID; -  vu32 ICSR; -  vu32 VTOR; -  vu32 AIRCR; -  vu32 SCR; -  vu32 CCR; -  vu32 SHPR[3]; -  vu32 SHCSR; -  vu32 CFSR; -  vu32 HFSR; -  vu32 DFSR; -  vu32 MMFAR; -  vu32 BFAR; -  vu32 AFSR; -} SCB_TypeDef; - - -void systemHardReset(void); - -void nvicInit        (NVIC_InitTypeDef*); -void nvicDisableInterrupts(void); - -#if defined(__cplusplus) -} -#endif - -#endif | 
