EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2008/7/24 20:33:00

3

关于投票

谈谈DSP的绝对地址访问。

虽然我不喜欢在高级语言中访问绝对地址。今天有个网友问我绝对地址的访问。我决定试试。
成功了。
#define   AbsAddress ((volatile Uint16  *)0x100000)  //定义一个指向0x100000的指针
volatile Uint16 *  ptr;//声明一个指针
对其指向单元赋值  *AbsAddress  =100;

在CCS下运行,赋值正确。

虽然成功了,但我还是不推荐大家使用绝对地址访问。
由于AbsAddress是常量不可以更改,应该使用数组或再定义一个指针进行其它地址的访问。
             AbsAddress[Offset] = 101;
对地址指针赋值 ptr = AbsAddress;
下面可以非常方便的这个指针了。
Uint16 i;
 for( i=0;i<=0xf;i++)
      {
       *ptr=i;    //向绝对地址里写数据。
        ptr++;   //绝对地址加1,
      }
回头仔细想一下,还定义什么宏呀。直接用ptr = (volatile Uint16  *)0x100000;那不就完了。还搞了上面那么一大堆的东东。想要啥地址把0x100000改成你想要的地址不就完了。
^_^,自己把自己绕进去了。不过也好,又进步了一把。

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(904) | 回复(0)

发表于 2008/7/22 17:57:50

2

关于投票

学习笔记--TMS320F2833X/2823X头文件函数(四)

//在DSP2833x_DisInt.asm中声明,共2个函数,未在DSP2833x_GlobalPrototypes.h中声明/
Uint16 DSP28x_DisableInt();//屏蔽可屏蔽中断,返回值为状态寄存器ST1的值
void DSP28x_RestoreInt(Uint16 Stat1);//恢复状态寄存器ST1的值,用于开可屏蔽中断

//**************在DSP2833x_DefaultIsr.c中定义的,共79个函数**************************//
//定义了中断服务程序的结构,用户需将用户代码填入即可

//在DSP2833x_CpuTimers.c中声明,共2个函数,在DSP2833x_CpuTimers.h中声明/
void InitCpuTimers(void);//初始化CPUTIMER
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);
//第一个参数是选用那个计数器。
//第二个参数是要知道SYSCLOCKout的频率,用来计算所需的周期值。
//第三个参数是中断周期(微妙)。

//**************在DSP2833x_Gpio.c中定义的,共1个函数**************************//
void InitGpio(void);//初始化GPIO管脚到确定状态

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(691) | 回复(0)

发表于 2008/7/22 16:59:16

3

关于投票

学习笔记--TMS320F2833X/2823X头文件函数(三)

//**************在DSP2833x_EQep.c中定义的,共4个函数**************************//
void InitEQep(void);//初始化ePwm模块,此函数在V1.10中未定义
void InitEQepGpio(void);//初始化GPIO管脚为eQep功能管脚
void InitEQep1Gpio(void);//初始化GPIO管脚为eQep1功能管脚
void InitEQep2Gpio(void);//初始化GPIO管脚为eQep2功能管脚

//**************在DSP2833x_I2C.c中定义的,共2个函数**************************//
void InitGpio(void);//初始化I2C模块,此函数在V1.10中未定义
void InitI2CGpio(void);//初始化GPIO管脚为I2C功能管脚

//**************在DSP2833x_Mcbsp.c中定义的,共20个函数**************************//
/*    其中两个为延时程序,内部使用。                                            */
// void InitMcbspGpio(void)在DSP2833x_GlobalPrototypes.h中未声明                */
// 调用了InitMcbspaGpio()和InitMcbspbGpio()                                 */
void InitMcbsp(void);//初始化Mcbsp模块,调用InitMcbspa()和InitMcbspb()
void InitMcbspa(void);//初始化Mcbsp-A模块
void InitMcbspaGpio(void);//初始化GPIO管脚为Mcbsp-A功能管脚
void InitMcbspa8bit(void);//设置发送和接收字长度为8bit
void InitMcbspa12bit(void);//设置发送和接收字长度为12bit
void InitMcbspa16bit(void);//设置发送和接收字长度为16bit
void InitMcbspa20bit(void);//设置发送和接收字长度为20bit
void InitMcbspa24bit(void);//设置发送和接收字长度为24bit
void InitMcbspa32bit(void);//设置发送和接收字长度为32bit
void InitMcbspb(void);//初始化Mcbsp-B模块
void InitMcbspbGpio(void);//初始化GPIO管脚为Mcbsp-B功能管脚
void InitMcbspb8bit(void);//设置发送和接收字长度为8bit
void InitMcbspb12bit(void);//设置发送和接收字长度为12bit
void InitMcbspb16bit(void);//设置发送和接收字长度为16bit
void InitMcbspb20bit(void);//设置发送和接收字长度为20bit
void InitMcbspb24bit(void);//设置发送和接收字长度为24bit
void InitMcbspb32bit(void);//设置发送和接收字长度为32bit

//**************在DSP2833x_PieCtrl.c中定义的,共2个函数**************************//
void EnableInterrupts(void);//使能PIE
void InitPieCtrl(void);//禁止PIE,清PIEIER和PIEIFR寄存器

//**************在DSP2833x_PieVect.c中定义的,共1个函数**************************//
void InitPieVectTable(void);//加载中断向量表,128*32bit。

//**************在DSP2833x_Sci.c中定义的,共5个函数**************************//
void InitSci(void);//初始化SCI模块,此函数在V1.10中未定义
void InitSciGpio(void);//初始化GPIO管脚为SCI功能管脚
void InitSciaGpio(void);//初始化GPIO管脚为SCI-A功能管脚
void InitScibGpio(void);//初始化GPIO管脚为SCI-B功能管脚
void InitScicGpio(void);//初始化GPIO管脚为SCI-C功能管脚

//**************在DSP2833x_Spi.c中定义的,共3个函数**************************//
void InitSpi(void);//初始化SPI模块,此函数在V1.10中未定义
void InitSpiGpio(void);//调用InitSpiaGpio();
void InitSpiaGpio(void);//初始化GPIO管脚为SPI功能管脚

//**************在DSP2833x_SWPrioritizedDefaultIsr.c中定义的,共80个函数**************************//
//定义了中断服务程序的结构,用户需将用户代码填入即可

//**************在DSP2833x_DSP2833x_SWPiroritizedPieVect.c中定义的,共1个函数**************************//
//void InitPieVectTable(void)//加载中断向量表,128*32bit。在DSP2833x_GlobalPrototypes.h中未声明

//**************在DSP2833x_DSP2833x_SysCtrl.c中定义的,共7个函数**************************//
void InitSysCtrl(void);
// 初始化系统控制寄存器到一个确定状态,关闭WDT,设置PLL的工作参数,设置外设时钟的预分频,使能外设时钟
void InitFlash(void);//初始化FLASH
void ServiceDog(void);//喂狗
void DisableDog(void);//关狗
void InitPll(Uint16 pllcr, Uint16 clkindiv);//设置PLL的工作参数,
void InitPeripheralClocks(void);//设置外设时钟的预分频,使能外设时钟
Uint16 CsmUnlock(void);//解密CSM保护,成功返回STATUS_SUCCESS,失败返回STATUS_FAIL

//**************在DSP2833x_Xintf.c中定义的,共3个函数**************************//
void InitXintf(void);//在DSP2833x_GlobalPrototypes.h中声明为void XintfInit(void);怀疑有BUG//
//初始化Xintf
void InitXintf16Gpio();//初始化GPIO管脚
void InitXintf32Gpio();//初始化GPIO管脚

//**************在DSP2833x_usDelay.asm中定义的,共1个函数**************************//
void DSP28x_usDelay(Uint32 Count);//延时函数,通过宏DELAY_US(A)来调用,A为时间(uS)

//**************在ADC_cal.asm中定义的,共1个函数**************************//
void ADC_cal (void);//加载ADC的出厂校正参数

//**************在DSP2833x_DBGIER.asm中定义的,共1个函数**************************//
void SetDBGIER(Uint16 dbgier);//在实时仿真下设置DBGIER寄存器

//**************在DSP2833x_MemCopy.c中定义的,共1个函数**************************//
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
//参数为源起始地址、源结束地址和目标起始地址

//在DSP2833x_GlobalPrototypes.h中声明,未在V1.10版本中发现函数原型/////////
void InitXIntrupt(void);

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(962) | 回复(0)

发表于 2008/7/22 11:16:57

2

关于投票

学习笔记--TMS320F2833X/2823X头文件函数(二)

//*************V1.10版中未发现DSP2833x_InitPeripherals.c文件******************//
void InitPeripherals(void);
//在DSP2833x_InitPeripherals.c中定义,但在V1.10版中未发现DSP2833x_InitPeripherals.c文件

//**************在DSP2833x_ECan.c中定义的,共6个函数**************************//
void InitECan(void);//初始化eCAN模块
void InitECana(void);//初始化eCAN-A模块
void InitECanb(void);//初始化eCAN-B模块
void InitECanGpio(void);//初始化GPIO管脚为eCAN功能管脚
void InitECanaGpio(void);//初始化GPIO管脚为eCAN-A功能管脚
void InitECanbGpio(void);//初始化GPIO管脚为eCAN-B功能管脚

//**************在DSP2833x_ECap.c中定义的,共8个函数**************************//
void InitECap(void);//初始化eCap模块,此函数在V1.10中未定义
void InitECapGpio(void);//初始化GPIO管脚为eCap功能管脚
void InitECap1Gpio(void);//初始化GPIO管脚为eCap1功能管脚
void InitECap2Gpio(void);//初始化GPIO管脚为eCap2功能管脚
void InitECap3Gpio(void);//初始化GPIO管脚为eCap3功能管脚
void InitECap4Gpio(void);//初始化GPIO管脚为eCap4功能管脚
void InitECap5Gpio(void);//初始化GPIO管脚为eCap5功能管脚
void InitECap6Gpio(void);//初始化GPIO管脚为eCap6功能管脚

//**************在DSP2833x_EPwm.c中定义的,共10个函数**************************//
void InitEPwm(void);//初始化ePwm模块,此函数在V1.10中未定义
void InitEPwmGpio(void);//初始化GPIO管脚为ePwm功能管脚
void InitEPwm1Gpio(void);//初始化GPIO管脚为ePwm1功能管脚
void InitEPwm2Gpio(void);//初始化GPIO管脚为ePwm2功能管脚
void InitEPwm3Gpio(void);//初始化GPIO管脚为ePwm3功能管脚
void InitEPwm4Gpio(void);//初始化GPIO管脚为ePwm4功能管脚
void InitEPwm5Gpio(void);//初始化GPIO管脚为ePwm5功能管脚
void InitEPwm6Gpio(void);//初始化GPIO管脚为ePwm6功能管脚
void InitEPwmSyncGpio(void);//初始化GPIO管脚为ePwm Synch功能管脚,在DSP2833x_GlobalPrototypes.h中未声明
void InitTzGpio(void);//初始化GPIO管脚为Trip Zone功能管脚

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(641) | 回复(0)

发表于 2008/7/22 10:49:09

2

关于投票

学习笔记--TMS320F2833X/2823X头文件函数(一)

TI提供的SPR530(C2833x/C2823x C/C++ 头文件和外设示例)使我们非常方便的使用2833X和2823X的外设。下面就它定义的函数加一个说明。

// $TI Release: DSP2833x Header Files V1.10 $
// $Release Date: February 15, 2008 $

//**************在DSP2833x_Adc.c中定义的,共1个函数**************************//
void InitAdc(void);//在DSP2833x_Adc.c中定义,初始化ADC,使能ADCCLK,调入ADC的出厂刻度数据,上电。

//**************在DSP2833x_DMA.c中定义的,共37个函数**************************//
void DMAInitialize(void);//执行DMA硬件复位,设置DMA不受仿真器的影响。。

// DMA Channel 1
void DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
//设置DMA的源和目标
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
//设置每次Burst的字节数、源地址增量、目标地址增量。注意对于28335,BYTE和WORD是一样的,都是16BIT。
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
//设置每次传送包含多少个Burst、传送完毕发中断,源地址增量、目标地址增量
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
//设置传送完毕的源地址和目标地址
void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
//设置DMA工作模式,包括触发源、是否使能触发源、是否使能oneshot模式、是否使能Continuous模式、是否使能外围设备同步、选择同步模式、溢出中断等。)
参数说明:
persel--选择触发源,值为下列选项
    DMA_SEQ1INT--------ADC
    DMA_SEQ2INT--------ADC
    DMA_XINT1  --------外部中断
    DMA_XINT2  --------外部中断
    DMA_XINT3  --------外部中断
    DMA_XINT4  --------外部中断
    DMA_XINT5  --------外部中断
    DMA_XINT6  --------外部中断
    DMA_XINT7  --------外部中断
    DMA_XINT13 --------外部中断
    DMA_TINT0  --------CPU时钟
    DMA_TINT1  --------CPU时钟
    DMA_TINT2  --------CPU时钟
    DMA_MXEVTA  --------McBSP-A
    DMA_MREVTA  --------McBSP-A
    DMA_MXREVTB --------McBSP-B
    DMA_MREVTB  --------McBSP-B
perinte--使能触发源,值为PERINT_DISABLE或PERINT_ENABLE
oneshot--使能oneshot模式,值为ONESHOT_DISABLE或ONESHOT_ENABLE。此模式下,一次触发完成全部burst。
cont--使能Continuous模式,值为CONT_DISABLE或CONT_ENABLE。此模式下,传送完毕后DMA重新被初始化,并等待触发源。
synce--使能外围设备同步,值为SYNC_DISABLE或SYNC_ENABLE。
syncsel--同步选择。值为SYNC_SRC或SYNC_DST。
ovrinte--使能溢出中断。值为OVRFLOW_DISABLE或OVEFLOW_ENABLE。
datasize--每次传送位数。值为SIXTEEN_BIT或THIRTYTWO_BIT。
chintmode--通道中断产生模式。CHINT_BEGIN:传送开始发中断。CHINT_END:传送结束发中断。
chinte--使能通道中断。值为CHINT_DISABLE或CHINT_ENABLE。
void StartDMACH1(void);
//启动DMACH1

//其它5个通道的DMA的函数功能含义是一样的
// DMA Channel 2
void DMACH2AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
void DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
void DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
void DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
void DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
void StartDMACH2(void);
// DMA Channel 3
void DMACH3AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
void DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
void DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
void DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
void DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
void StartDMACH3(void);
// DMA Channel 4
void DMACH4AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
void DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
void DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
void DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
void DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
void StartDMACH4(void);
// DMA Channel 5
void DMACH5AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
void DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
void DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
void DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
void DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
void StartDMACH5(void);
// DMA Channel 6
void DMACH6AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
void DMACH6BurstConfig(Uint16 bsize,Uint16 srcbstep, int16 desbstep);
void DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
void DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
void DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
void StartDMACH6(void);

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(601) | 回复(0)

发表于 2008/6/26 12:19:45

2

关于投票

学习笔记---TMS320X28X的ePWM说明书的一个BUG。

点击开大图

spru791d(TMS320x28xx, 28xxx Enhanced Pulse Width Modulator (ePWM) Module (Rev. D)).pdf

今天收到TI客服中心的EMAIL,确认是TI的文件有BUG。让我搞明白了。感谢一下TI的工作人员。

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(996) | 回复(0)

发表于 2008/6/25 16:33:51

2

关于投票

学习笔记--TMS320x28xx ePWM的一个问题?

近日学习DSP,看到ePWM这一部分,看到spru791d(TMS320x28xx, 28xxx Enhanced Pulse Width Modulator (ePWM) Module (Rev. D)).pdf,贴的图是C版的,即SPRU791C.PDF。
D版中是图2-9。
感觉图中有BUG,CTR已经是0x0000了,为什么没有脉冲发生呢?
不知道该到哪里去核实一下?
http://space.ednchina.com/upload/2008/6/25/242eb94b-0dd4-493f-bb74-29089373fb2a.JPG

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(866) | 回复(0)

发表于 2008/6/10 11:15:56

2

关于投票

郁闷,F28335的EVM板没有连通

icon
安装CCS3.3,在安装update。。。
安装510USB驱动。
运行CCS setup。
运行CCS,可惜连不到目标板。
只有联系客服了。头大!!
QQ远程协助也没找到问题,只有叫他们上门服务了。
就是离市区太远了,很多事情很麻烦的。

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(733) | 回复(4)

发表于 2008/5/29 9:17:34

1

关于投票

评估板价格差距好大呀!

这两天询了一下价格。差距好大呀。
闻亭的510plus+28335的评估板一共要7K多。
瑞泰的5100USB+F28335-A只要3.2K。
合众达的510USB+DEC28335要接近5K。
真的差的好远。
板子的指标看了一下,差距不大。
不知道是怎么回事?
是服务好吗还是公司经营策略?
还是决定买合众达的!
“TI的07年亚太区最大DSP分销商”这个称号在这里起了很大的作用。

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1007) | 回复(6)

发表于 2008/5/27 11:00:51

1

关于投票

DSP的设计流程。

第一次使用DSP。
我计划中的设计流程。
第一步,确定处理方案和算法。已完成,还有优化的余地。使用Matlab进行了仿真计算,基本达到预期效果。
第二步,选择合适的DSP和外围器件。没办法,对DSP一窍不通,随手选了一款28335。本来想选6726的,考虑到开发板比较贵,就放弃了。先买了EVM学习学习。
第三步,编写DSP程序代码。
第四步,调试。
第五步,设计DSP的PCB板。调试,固化。
一步一步慢慢来。不知道思路对否,希望大家斧正。

系统分类: DSP  |  用户分类: 仪表-硬件-DSP  |  标签: 无标签  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(630) | 回复(0)

Total , Page /