求助KEIL MDK 逻辑分析仪的使用,仿真M3的PWM
是不是symbol 里面POARTA 右边的地址没有啊?!
And Mask:为1 表示输出 PA1
为2,Shift Right为1,表示输出 PA2
回复 沙发 Study_Stellaris 的帖子
这个我知道啊!上面没有波形,不知道是不是我设置的有问题!
那你就要检查一下你的程序,看看哪两个 GPIO 输出波形。
回复 4楼 Study_Stellaris 的帖子
谢谢楼上的热心解答,单步运行到下面这个函数单片机就进入异常中断了!
HWREG(ulGen + PWM_O_X_CTL) = ((HWREG(ulGen + PWM_O_X_CTL) &
~(PWM_X_CTL_MODE | PWM_X_CTL_DEBUG |
PWM_X_CTL_LATCH | PWM_X_CTL_MINFLTPER |
PWM_X_CTL_FLTSRC | PWM_X_CTL_DBFALLUPD_M |
PWM_X_CTL_DBRISEUPD_M |
PWM_X_CTL_DBCTLUPD_M |
PWM_X_CTL_GENBUPD_M |
PWM_X_CTL_GENAUPD_M |
PWM_X_CTL_LOADUPD | PWM_X_CTL_CMPAUPD |
PWM_X_CTL_CMPBUPD)) | ulConfig);
回复 5楼 youyi_xie 的帖子
这个是 PWMConfigure 里边的。
检查一下,是不是 API 参数哪里不对啊。最好把程序贴出来看看。
回复 6楼 Study_Stellaris 的帖子
ulGen + PWM_O_X_CTL 出来地址是0x40028080 memory map 里面这一段没有执行读写
0x40020000 - 0x40020FFF read write
0x40024000 - 0x40027FFF read write
0x40030000 - 0x40033FFF read write
0x40038000 - 0x40038FFF read write
0x4003C000 - 0x4003CFFF read write
0x400FE000 - 0x400FFFFF read write
0xE0000000 - 0xE0000FFF read write
0xE000E000 - 0xE000EFFF read write,怎么把一段加进入啊?!
回复 7楼 youyi_xie 的帖子
用的是哪颗片子,选对 Device 之后,Keil 不是自己已经把该添加的都添加进去了吗?
我用过,可以查看 PWM 啊。
回复 8楼 Study_Stellaris 的帖子
#include //LM3S2601
#define pwm0 GPIO_PIN_0
void init(void );
int main()
{
unsigned int x=1000;
init();
while(1)
{
PWMPulseWidthSet(PWM_BASE,PWM_OUT_0,x);
SysCtlDelay(1000000);
x=x+100;
if(x>6000)
x=1000;
}
}
void init()
{
SysCtlLDOSet(SYSCTL_LDO_2_75V); //系统内核工作电压2.75V
SysCtlClockSet(SYSCTL_SYSDIV_8 | //系统8分频 系统频率=200/8=25MHz
SYSCTL_USE_PLL | //使用锁相环PLL
SYSCTL_OSC_MAIN | //使用主振荡器时钟
SYSCTL_XTAL_8MHZ); //系统晶振频率8MHz
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); //enable the GPIOH PH0->CCP6,
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); //enable the PWM
SysCtlPWMClockSet(SYSCTL_PWMDIV_1 ); //set clk of pwm
GPIOPinTypePWM(GPIO_PORTH_BASE,pwm0); // select the PWM GPIOs
PWMGenConfigure(PWM_BASE,PWM_GEN_3 ,PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC ); //configure
PWMGenPeriodSet(PWM_BASE,PWM_GEN_3,6000); //pwm period set
PWMPulseWidthSet(PWM_BASE,PWM_OUT_6,3000);
PWMOutputState(PWM_BASE, PWM_OUT_6_BIT,true ); // select the pwm and run
PWMGenEnable(PWM_BASE,PWM_GEN_0); //pwm out
}
晕死了!是不是我装的keil有问题啊,仿真的时候运行到PWMGenConfigure就报错!
*** error 65: access violation at 0x40028100 : no 'read' permission
*** error 65: access violation at 0x40028100 : no 'write' permission
回复 9楼 youyi_xie 的帖子
PWMGenEnable(PWM_BASE,PWM_GEN_0); //pwm out 这个地方应该是 PWMGenEnable(PWM_BASE,PWM_GEN_3); //pwm out
LM3S2601 不带 PWM Module啊。
[
本帖最后由 Study_Stellaris 于 2011-11-7 17:41 编辑 ]
回复 10楼 Study_Stellaris 的帖子
唉!晕
结贴吧!
我看那个PDF上面写着
1.4.2 电机控制外设
为了加强电机控制,LM3S2601控制器包含脉宽调制(PWM)输出。
1.4.2.1 PWM
脉宽调制是一种对模拟信号电平进行数字编码的强大技术。 使用高分辨率计数器来产生方波,并且
通过调整方波的占空比来对模拟信号进行编码。 典型的应用包括开关电源和电机控制。
在LM3S2601上,PWM 运动控制功能可通过以下实现:
26 四月 11, 2008
广州周立功单片机发展有限公司
www.zlgmcu.com
结构概述
■ 使用CCP管脚的通用定时器的运动控制特性
CCP管脚(见187页)
通用定时器模块的CCP(捕获比较PWM)管脚可由软件编程来支持简单的PWM模式,在该模式中
PWM信号的输出反相可由软件编程控制。
刚下了一个Cotex-M3的选型手册上面LM3S2601是0个PWM !!!
谢谢Study_Stellaris的耐心解答!谢谢!
回复 11楼 youyi_xie 的帖子
LM3S2601 应该是不包含 PWM 模块。
不过可以通过 Timer 的 CCP 引脚输出 PWM 波形。
只不过这个应该是不带死区控制的。
用MKD仿真PWM,就不能再看PORTx.X,这看的是管脚,
应该看TIMx->CCRX,应该看这一类的寄存器,添加方法与添加引脚寄存器的方法是相同 的;
比如你要看TIM2的CH2输出的PWM波形;
那么就应该添加“TIM3->CCR2”
这时候应该特别注意的是“Display Type”里面应该选择“Analog”