DSP C54X ioport的用法

The ioport keyword enables access to the I/O port space of the C54x devices. The keyword has the form:

ioport type port hex_num

ioport is the keyword that indicates this is a port variable.
type must be char, short, int, or the unsigned variable.
porthex_num refers to the port number. The hex_num argument is a hexadecimal number.

All declarations of port variables must be done at the file level. Port variables declared at the function level are not supported. Do not use the ioport keyword in a function prototype.
For example, the following code declares the I/O port as unsigned port 10h, writes a to port 10h, then reads port 10h into b:

ioport unsigned port10; /* variable to access I/O port 10h */
int func ()
{
     ...
     port10 = a;         /* write a to port 10h             */
     ...
     b = port10;         /* read port 10h into b            */
     ...
}
The use of port variables is not limited to assignments. Port variables can be used in expressions like any other variable. Following are examples:

a = port10 + b; /* read port 10h, add b, assign to a       */
port10 += a;     /* read port 10h, add a, write to port 10h */
In calls, port variables are passed by value, not by reference:

call(port10);    /* read port 10h and pass (by value) to call */
call(&port10);    /* invalid pass by reference! */


DSP中如何访问I/O,数据空间

访问I/O空间


I/O空间地址声明

要在程序中访问io空间地址,必须首先用关键字“ioport”对要访问的地址进行定义。

语法:ioport t ype porthex_num
ioport 声明io空间端口变量的关键字;
type 变量类型,可以为char, short, int或unsigned int;
porthex_num 端口号,port后面接16进制数字。

ioport unsigned int port10;

注:声明io空间地址必须在C文件起始声明,不允许在函数中使用ioport声明io空间地址。

I/O空间地址访问

访问用ioport关键字声明的I/O端口变量和访问一般变量没有区别。

ioport unsigned int port10;
int func ()
{
...
port10 = a;
...
b = port10;
...
}

I/O端口变量的使用不仅仅局限于赋值,和其他变量同样也可以应用于其它的表达式。

call (port10);
a = port10 + b;
port10 += a;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
程序中访问的任何一个IO地址都必须在C语言程序起始处用ioport关键字声明!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

访问数据空间

访问数据空间不需要对要访问的单元预先声明,访问是通过指针的方法实现的。

unsigned int org,cnt,block,offset,tmp,i;
org = *(unsigned int *) 0x8000;
cnt = *(unsigned int *) 0x8001;
block = *(unsigned int *) 0x8002;
offset = *(unsigned int *) 0x8003;
for (i=0; i<cnt; i++)

tmp = *(unsigned int *) (org + i);
*(unsigned int *) (org + offset +i) = tmp;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/************************************************************* *Copyright (c) 2005,北京精仪达盛科技有限公司研发部 *All rights reserved * *文件名称:tms320uc5402.h *文件标示: *摘 要:本文件内容为TMS320UC5402 DSP 寄存器定义头文件 * 寄存器都以指针方式进行寻址 * *当前版本:1.0 *作 者:王飞 *完成日期:2005年2月17日 * *取代版本: *原作者 : *完成日期: *************************************************************/ #ifndef TMS320UC5402_H #define TMS320UC5402_H /*TMS320UC5402 CPU寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define IMR *(volatile unsigned int *)0x0000 /*中断屏蔽寄存器*/ #define IFR *(volatile unsigned int *)0x0001 /*中断标志寄存器*/ #define ST0 *(volatile unsigned int *)0x0006 /* 状态寄存器0 */ #define AL *(volatile unsigned int *)0x0008 /* 低16位A 累加器寄存器 */ #define AH *(volatile unsigned int *)0x0009 /* 高16位A 累加器寄存器 */ #define AG *(volatile unsigned int *)0x000A /* Accumulator A guard bits (39–32) */ #define BL *(volatile unsigned int *)0x000B /* 低16位B 累加器寄存器 */ #define BH *(volatile unsigned int *)0x000C /* 高16位B 累加器寄存器 */ #define BG *(volatile unsigned int *)0x000D /* Accumulator B guard bits (39–32) */ #define TREG *(volatile unsigned int *)0x000E /* 临时寄存器 */ #define TRN *(volatile unsigned int *)0x000F /* 传输寄存器 */ #define AR0 *(volatile unsigned int *)0x0010 /* 辅助寄存器0 */ #define AR1 *(volatile unsigned int *)0x0011 /* 辅助寄存器1 */ #define AR2 *(volatile unsigned int *)0x0012 /* 辅助寄存器2 */ #define AR3 *(volatile unsigned int *)0x0013 /* 辅助寄存器3 */ #define AR4 *(volatile unsigned int *)0x0014 /* 辅助寄存器4 */ #define AR5 *(volatile unsigned int *)0x0015 /* 辅助寄存器5 */ #define AR6 *(volatile unsigned int *)0x0016 /* 辅助寄存器6 */ #define AR7 *(volatile unsigned int *)0x0017 /* 辅助寄存器7 */ #define SP *(volatile unsigned int *)0x0018 /* 堆栈寄存器 */ #define BK *(volatile unsigned int *)0x0019 /* Circular buffer size register */ #define BRC *(volatile unsigned int *)0x001A /* 块重复计数器寄存器 */ #define RSA *(volatile unsigned int *)0x001B /* 块重复开始地址寄存器 */ #define REA *(volatile unsigned int *)0x001C /* 块重复结束地址寄存器 */ #define PMST *(volatile unsigned int *)0x001D /* 处理器模式状态寄存器 */ #define XPC *(volatile unsigned int *)0x001E /* 扩展程序页寄存器 */ /*TMS320UC5402 外围寄存器 ~~~~~~~~~~~~~~~~~~~~*/ /*TMS320UC5402 多通道缓存串口0寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define DRR20 *(volatile unsigned int *)0x0020 /* McBSP0数据接收寄存器2 */ #define DRR10 *(volatile unsigned int *)0x0021 /* McBSP0数据接收寄存器1 */ #define DXR20 *(volatile unsigned int *)0x0022 /* McBSP0数据发送寄存器2 */ #define DXR10 *(volatile unsigned int *)0x0023 /* McBSP0数据发送寄存器1 */ #define SPSA0 *(volatile unsigned int *)0x0038 /* McBSP0 subbank 地址寄存器 */ #define SPSD0 *(volatile unsigned int *)0x0039 /* McBSP0 subbank 数据寄存器 */ /*TMS320UC5402 定时器0寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define TIM *(volatile unsigned int *)0x0024 /* 定时器0寄存器 */ #define PRD *(volatile unsigned int *)0x0025 /* 定时器0周期计数器寄存器 */ #define TCR *(volatile unsigned int *)0x0026 /* 定时器0控制寄存器 */ /*TMS320UC5402 等待状态寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define SWWSR *(volatile unsigned int *)0x0028 /* 软件等待状态寄存器 */ #define BSCR *(volatile unsigned int *)0x0029 /* bank-switching control register */ #define SWCR *(volatile unsigned int *)0x002B /* 软件等待状态控制寄存器 */ /*TMS320UC5402 主机通讯接口寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define HPIC *(volatile unsigned int *)0x002C /* 主机通讯接口控制寄存器 */ /*TMS320UC5402 定时器1寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define TIM1 *(volatile unsigned int *)0x0030 /* 定时器1寄存器 */ #define PRD1 *(volatile unsigned int *)0x0031 /* 定时器1周期计数器寄存器 */ #define TCR1 *(volatile unsigned int *)0x0032 /* 定时器1控制寄存器 */ /*TMS320UC5402 通用IO寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define GPIOCR *(volatile unsigned int *)0x003C /* 通用IO引脚控制寄存器 */ #define GPIOSR *(volatile unsigned int *)0x003D /* 通用IO引脚状态寄存器 */ /*TMS320UC5402 多通道缓存串口1寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define DRR21 *(volatile unsigned int *)0x0040 /* McBSP1数据接收寄存器2 */ #define DRR11 *(volatile unsigned int *)0x0041 /* McBSP1数据接收寄存器1 */ #define DXR21 *(volatile unsigned int *)0x0042 /* McBSP1数据发送寄存器2 */ #define DXR11 *(volatile unsigned int *)0x0043 /* McBSP1数据发送寄存器1 */ #define SPSA1 *(volatile unsigned int *)0x0048 /* McBSP1 subbank 地址寄存器 */ #define SPSD1 *(volatile unsigned int *)0x0049 /* McBSP1 subbank 数据寄存器 */ /*TMS320UC5402 DMA寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define DMPREC *(volatile unsigned int *)0x0054 /* DMA通道优先级,使能控制寄存器 */ #define DMSA *(volatile unsigned int *)0x0055 /* DMA subbank 地址寄存器 */ #define DMSDI *(volatile unsigned int *)0x0056 /* DMA subbank 数据自增寄存器 */ #define DMSDN *(volatile unsigned int *)0x0057 /* McBSP1 subbank 数据寄存器 */ /*TMS320UC5402 PLL寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define CLKMD *(volatile unsigned int *)0x0058 /* 时钟模式寄存器 */ /*TMS320UC5402 多通道缓存串口子地址 ~~~~~~~~~~~~~~~~~~~~*/ #define SPCR1 0x00 /* 串口控制寄存器1 */ #define SPCR2 0x01 /* 串口控制寄存器2 */ #define RCR1 0x02 /* 接收控制寄存器1 */ #define RCR2 0x03 /* 接收控制寄存器2 */ #define XCR1 0x04 /* 传送控制寄存器1 */ #define XCR2 0x05 /* 传送控制寄存器2 */ #define SRGR1 0x06 /* 采样率产生寄存器1 */ #define SRGR2 0x07 /* 采样率产生寄存器2 */ #define MCR1 0x08 /* 多通道寄存器1 */ #define MCR2 0x09 /* 多通道寄存器2 */ #define RCERA 0x0A /* 接收通道使能寄存器A */ #define RCERB 0x0B /* 接收通道使能寄存器B */ #define XCERA 0x0C /* 发送通道使能寄存器A */ #define XCERB 0x0D /* 发送通道使能寄存器B */ #define PCR 0x0E /* 引脚控制寄存器 */ /*TMS320UC5402 DMA子地址 ~~~~~~~~~~~~~~~~~~~~*/ #define DMSRC0 0x00 /* DMA通道0源地址寄存器 */ #define DMDST0 0x01 /* DMA通道0目的地址寄存器 */ #define DMCTR0 0x02 /* DMA通道0单元数目寄存器 */ #define DMSFC0 0x03 /* DMA通道0同步选择、桢数计数寄存器 */ #define DMMCR0 0x04 /* DMA通道0传送模式控制寄存器 */ #define DMSCR1 0x05 /* DMA通道1源地址寄存器 */ #define DMDST1 0x06 /* DMA通道1目的地址寄存器 */ #define DMCTR1 0x07 /* DMA通道1单元数目寄存器 */ #define DMSFC1 0x08 /* DMA通道1同步选择、桢数计数寄存器 */ #define DMMCR1 0x09 /* DMA通道1传送模式控制寄存器 */ #define DMSRC2 0x0A /* DMA通道2源地址寄存器 */ #define DMDST2 0x0B /* DMA通道2目的地址寄存器 */ #define DMCTR2 0x0C /* DMA通道2单元数目寄存器 */ #define DMSFC2 0x0D /* DMA通道2同步选择、桢数计数寄存器 */ #define DMMCR2 0x0E /* DMA通道2传送模式控制寄存器 */ #define DMSRC3 0x0F /* DMA通道3源地址寄存器 */ #define DMDST3 0x10 /* DMA通道3目的地址寄存器 */ #define DMCTR3 0x11 /* DMA通道3单元数目寄存器 */ #define DMSFC3 0x12 /* DMA通道3同步选择、桢数计数寄存器 */ #define DMMCR3 0x13 /* DMA通道3传送模式控制寄存器 */ #define DMSRC4 0x14 /* DMA通道4源地址寄存器 */ #define DMDST4 0x15 /* DMA通道4目的地址寄存器 */ #define DMCTR4 0x16 /* DMA通道4单元数目寄存器 */ #define DMSFC4 0x17 /* DMA通道4同步选择、桢数计数寄存器 */ #define DMMCR4 0x18 /* DMA通道4传送模式控制寄存器 */ #define DMSRC5 0x19 /* DMA通道5源地址寄存器 */ #define DMDST5 0x1A /* DMA通道5目的地址寄存器 */ #define DMCTR5 0x1B /* DMA通道5单元数目寄存器 */ #define DMSFC5 0x1C /* DMA通道5同步选择、桢数计数寄存器 */ #define DMMCR5 0x1D /* DMA通道5传送模式控制寄存器 */ #define DMSRCP 0x1E /* DMA源程序页地址(控制通道) */ #define DMDSTP 0x1F /* DMA目的程序页地址(控制通道) */ #define DMIDX0 0x20 /* DMA单元索引地址寄存器0 */ #define DMIDX1 0x21 /* DMA单元索引地址寄存器1 */ #define DMFRI0 0x22 /* DMA桢索引寄存器0 */ #define DMFRI1 0x23 /* DMA桢索引寄存器1 */ #define DMGSA 0x24 /* DMA全局源地址重装寄存器 */ #define DMGDA 0x25 /* DMA全局目的地址重装寄存器 */ #define DMGCR 0x26 /* DMA全局计数重装寄存器 */ #define DMGFR 0x27 /* DMA全局桢计数重装寄存器 */ #endif

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值