DSP

TI C6000 DSP基础知识之 GPIO

2019-07-13 10:16发布

嵌入式DSP基础知识一、   DSP的结构1)、哈佛结构:将程序和数据存储在不同的存储器中,每个独立存储器独立编址,独立访问。 2)、多级流水线:一种DSP指令(取指、译码、取操作数、执行).每个阶段称为一级流水线。3)、硬件乘法器。4)、特殊的DSP指令。5)、多总线,多处理单元。二、   TMS320C6000系列DSPC67X包括:程序取指单元、指令分配单元、指令译码单元、(A/B2组通用寄存器(共32个)、8个功能单元、1组控制寄存器、控制逻辑、测试仿真和中断控制逻辑。TMS320C67X DSP的结构框图如下图所示:C674X有两级缓存:32Kb L1P程序缓存、32Kb L1D数据缓存、256KbL2二级缓存。(初始条件下二级缓存当做内存来使用。L1才当做缓存使用)。片内外设:EMIFA/B、EDMA3(x2)、Timers、GPIO、UART(x3)、SPI、I2C(x2)、HPI、USB1.0/USB2.0、McASP(x2)、EMAC肪宽发生器、VPIF、SATA、MMC/SD(8b)(x2)、HPI、MDIO、128KBRAM。三、  DSP子系统 四、General-Purpose-Input/Output(GPIO)   Bank0-Band8  9*16=144GPIO一旦GPIO使能寄存器(GPIEN)被使能,GPIO引脚可以用做通用目的输入、输出。用户可以使用GPIO方向寄存器(GPDIR)独立配置每条GPIO引脚为输入或输出。当配置为输出(GPxDIR位=1),GPIO值(GPVAL)寄存器:GPxVAL位的值就被送到相应的GPn引脚。当配置为输入(GPxDIR位=0)时,输入状态可以从相应的GPxVAL读取。除了通用目的输入/输出功能外,GPIO外设的边沿检测逻辑反映了配置为输入(GPxDIR位=0)的指定GPIO引脚是否发生一个信号的变化。GPIO三角Delta Register反映GPIO信号的变化。当相应的使能输入发生从低电平到高电平的变化时,GPDH的GPxDH位被置1;当相应的使能输入发生从高电平到低电平的变化时,GPDL的GPxDL位被置1;GPIO Enable Register (GPEN)、GPIO Direction Register (GPDIR)、GPIO Value Register (GPVAL)、GPIO Delta High Register(GPDH)、GPIO Delta Low Register (GPDL)、GPIO High Mask Register (GPHM)、GPIO Low Mask Register (GPLM)、GPIO Global Control Register (GPGC)、GPIO Interrupt Polarity Register (GPPOL)// GPIO0[0] 1    // GPIO1[0] 17         // GPIO2[0] 33    // GPIO3[0] 49         // GPIO4[0] 65    // GPIO5[0] 81         // GPIO6[0] 97         // GPIO7[0] 113         // GPIO8[0] 129  3.1、怎样配置一个GPIO的输入输出?1)、使能通用输入输出端口外设(GPIO)。          //使能 GPIO 模块(对相应外设模块的使能也可以在 BootLoader 中完成) PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); 2)、配置相应GPIO口为普通输入输出口(I/O复用中选择复用功能)。 savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &                   ~(SYSCFG_PINMUX1_PINMUX1_31_28));   //读取相应寄存器的值 HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =                (PINMUX1_GPIO0_0_ENABLE | savePinmux); //设置相应寄存器的值 HWREG:外设寄存器的值的宏定义。 3)、配置相应GPIO口为输入或输出。 GPIODirModeSet(SOC_GPIO_0_REGS, 1,  GPIO_DIR_OUTPUT);    GPIO_DIR_INPUT 4)、配置相应GPIO口输入或输出高底电平。 GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);    //底电平 GPIO0[0]              GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);    //高电平 GPIO0[0] 3.2、如何配置GPIO中断?1)、使能通用输入输出端口外设(GPIO)。 2)、配置相应GPIO口为普通输入输出口(I/O复用中选择复用功能)。 3)、配置相应GPIO口为输入。 4)、使能GPIO BANK中断。 5)、设置管脚中断触发类型。 6)、映射中断并注册中断服务函数。 GPIOIntTypeSet(SOC_GPIO_0_REGS, 7, GPIO_INT_TYPE_FALLEDGE); // 配置 USER0 KEY GPIO0[6] 为下降沿触发 GPIO_INT_TYPE_BOTHEDGE); // 配置USER1 KEY GPIO6[1] 为上升沿及下降沿触发 // 使能 GPIO BANK 中断     GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);    // USER0 KEY GPIO0     GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);    // USER1 KEY GPIO6          // 注册中断服务函数          IntRegister(C674X_MASK_INT4, USER0KEYIsr);          IntRegister(C674X_MASK_INT5, USER1KEYIsr);          // 映射中断到 DSP 可屏蔽中断          IntEventMap(C674X_MASK_INT4, SYS_INT_GPIO_B0INT);          IntEventMap(C674X_MASK_INT5, SYS_INT_GPIO_B6INT);   // SYS_INT_GPIO_B6INT中断事件(如下:)          // 使能 DSP 可屏蔽中断          IntEnable(C674X_MASK_INT4);          IntEnable(C674X_MASK_INT5); 7)、使能DSP中断。 IntDSPINTCInit();   // 初始化 DSP 中断控制器          IntGlobalEnable();  // 使能 DSP 全局中断 中断服务函数:    GPIOBankIntDisable(SOC_GPIO_0_REGS, 0);  // 禁用 GPIO BANK 0 中断 IntEventClear(SYS_INT_GPIO_B0INT);      // 清除 GPIO BANK 0 中断状态 ………………          //执行短小的中断函数。     GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);  // 使能 GPIO BANK 0 中断 中断类型:1)、复位中断(RESET优先级最高2)、不可屏蔽中断/异常:所有软件中断和两个外部中断RSNMI3)、12个可屏蔽硬件中断(INT4INT15)  12个事件中断源4)、可屏蔽硬件异常(EXCAP)。事件:0-127个独立事件和组合事件(Event Combiner0~127个独立中断事件定义在interrupt.h头文件中: TimerInterruptsSyscfg InterruptsPRU InterruptsEHRPWM InterruptsEDMA InterruptsEMU InterruptsIDMA InterruptsMMCSD InterruptsUSB InterruptsSATA InterruptsEMAC InterruptsHPI InterruptsI2C InterruptsSPI InterruptsUART InterruptsGPIO InterruptsECAP InterruptsEMIF InterruptsDDR InterruptsMCASP InterruptsRTC InterruptsPSC InterruptsLCD InterruptsMCBSP InterruptsUPP InterruptsVPIF InterruptsINTC InterruptsEMC InterruptsPMC InterruptsUMC InterruptsPDC InterruptsSYS InterruptsDMC Interrupts组合事件Event Combiners:中断事件选择 中断错误事件 中断向量表(功能:在相应中断发生后,跳转到相应的地址,执行相应的指令。)1、  ISFPinterrupt service fetchpacket)中断服务取指包2、  最多832位指令/14条紧凑指令(Compact Instance3、  中断向量表可以储存在DSP存储器的任何存储空间,只要满足入口地址对齐到1K字节即可。