C2000系列DSP的寄存器三种操作方式

直接对寄存器的地址进行操作

(*(volatile unsigned long *)(address)) = ((unsigned long)value)

address可以是立即数或者是宏定义,该操作方法常见于TI的早期DSP芯片2407的程序中

对寄存器的指针进行操作

#define  GPIO_BASE_ADDR        (0x00006F80)
//! \brief Defines the General Purpose I/O (GPIO) object
typedef struct _GPIO_Obj_
{
  volatile uint32_t GPACTRL;         //!< GPIO A Control Register
	//...
} GPIO_Obj;

//! \brief Defines the general purpose I/O (GPIO) handle
typedef struct _GPIO_Obj_ *GPIO_Handle;
GPIO_Handle gpioHandle;
  // initialize the GPIO handle
gpioHandle = (GPIO_Handle) (*GPIO_BASE_ADDR);
gpioHandle-> GPACTRL=value;

该操作方法常见于TI公司DSP28069的示例程序中

使用编译器预处理命令DATA_SECTION

#pragma DATA_SECTION(GpioDataRegs,"GpioDataRegsFile");
volatile struct GPIO_DATA_REGS GpioDataRegs;

该操作方法常见于TI公司DSP2812和28335的程序中,GpioDataRegsFiled在文件DSP2833x_Headers_nonBIOS.cmd进行了定义

MEMORY
{
 PAGE 0:    /* Program Memory */

 PAGE 1:    /* Data Memory */
/*省去部分内容*/
   GPIOCTRL    : origin = 0x006F80, length = 0x000040     /* GPIO control registers */
   GPIODAT     : origin = 0x006FC0, length = 0x000020     /* GPIO data registers */
   GPIOINT     : origin = 0x006FE0, length = 0x000020     /* GPIO interrupt/LPM registers */
/*省去部分内容*/
}
SECTIONS
{
   PieVectTableFile : > PIE_VECT,   PAGE = 1
/*省去部分内容*/
   GpioCtrlRegsFile  : > GPIOCTRL     PAGE = 1
   GpioDataRegsFile  : > GPIODAT      PAGE = 1
   GpioIntRegsFile   : > GPIOINT      PAGE = 1
/*省去部分内容*/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值