搜索
bottom↓
回复: 8

C8051F340 PCA产生PWM和SPI0CN冲突

[复制链接]

出340入0汤圆

发表于 2019-11-10 21:55:14 | 显示全部楼层 |阅读模式
本帖最后由 ajfan 于 2019-11-10 22:00 编辑

请教各位专家,C8051F340 配置P1.2用于PCA 产生16位PWM,目前发现在屏蔽SPI0_Init() 或屏蔽SPI0_Init()内部SPI0CN    = 0x01时,PWM可以正常输出,如果包含则PWM无反应,请各位朋友帮忙看下有可能的原因,不胜感谢。

主函数
PCA0MD &= ~0x40;             //禁止看门狗
SYSCLK_Init();
PCA0_Init();
Uart0Init();
SPI0_Init();
Port_Init();


子函数
void SYSCLK_Init ()
{  
  unsigned int i=0;
  CLKMUL=0x00;//复位4倍时钟乘法器
  CLKMUL=0x00;//选择时钟乘法器的输入
  CLKMUL|=0x80;//时钟乘法器使能,连接时钟乘法器的是内部振荡器
  for(i=0;i<20;i++);// Wait 5us for initialization
  CLKMUL|=0xC0;//初始化时钟乘法器
  while((CLKMUL&0x20)==0);
  CLKSEL=0X02;//0X03为4倍;0x02为2倍 系统时钟选择位
  OSCICN=0x83;//内部振荡器输出为0x83--12MHz; 0x82--6MHz;0x81 3MHz
}

void SPI0_Init()
{
   SPI0CFG   = 0x60;         //0X40
   SPI0CN    = 0x01;                //0D
   // The equation for SPI0CKR is (SYSCLK/(2*F_SCK_MAX))-1
   SPI0CKR   = (SYSCLK/(2*F_SCK_MAX)) - 1;
}

void PCA0_Init (void)
{
  unsigned int Value ;
  PCA0CN = 0x00; // Stop counter; clear all flags
  PCA0MD = 0x08; // Use SYSCLK as time base
  PCA0CPM0 = 0xC2; // Module 0 = 16-bit PWM mode and
  Value = 65536 - (65536 * 0.5); // Configure initial PWM duty cycle = 60%
  PCA0CPL0 = (Value & 0x00FF);
  PCA0CPH0 = (Value & 0xFF00)>>8;
  CR = 1;
}

void Port_Init(void)
{
    P0MDOUT   = 0x56;
    P1MDOUT   = 0xFC;        //P1.2 推挽输出
    P2MDOUT   = 0xF7;
    P3MDOUT   = 0xF0;
    P4MDOUT   = 0x01;
    P0SKIP    = 0x03;
    XBR0      = 0x07;
    XBR1      = 0xC1;        //PCA 输出至 CEX0,连到端口引脚
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出340入0汤圆

 楼主| 发表于 2019-11-11 09:05:04 来自手机 | 显示全部楼层
人肉顶一下

出0入0汤圆

发表于 2019-11-11 09:23:34 | 显示全部楼层
SPI0CN=0x01表示SPI工作于3线方式,无NSS管脚,PCA的CEX0管脚由P1.2变为P1.1管脚

出340入0汤圆

 楼主| 发表于 2019-11-11 11:16:30 来自手机 | 显示全部楼层
大神啊,应该是这个忽略了,谢谢

出0入0汤圆

发表于 2019-11-11 18:47:30 | 显示全部楼层
现在还有依旧用C8051F系列,当年8051的性能之王

出340入0汤圆

 楼主| 发表于 2019-11-11 19:58:45 | 显示全部楼层
本帖最后由 ajfan 于 2019-11-11 20:05 编辑

非专业搞MCU,纯个人爱好自学,问题比较多。
经过modbus大神的指导,目前PWM可以在1.2输出,确实是NSS未使用需要人为skip一位,改正后PWM输出367HZ左右,占空比可调。

主函数调用顺序
        SYSCLK_Init();
        Port_Init();
        PCA0_Init();
        Uart0Init();
        SPI0_Init();
        Timer0_Init();


目前想调整PWM的频率,按手册说明可以通过定时器0溢出作为时钟源(PCA0MD = 0x08;改为PCA0MD = 0x04;),对应涉及uart 和 timer0以下修改,不过修改后PWM呈10HZ非正常输出,还请各位高手解惑。(uart功能正常)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出340入0汤圆

 楼主| 发表于 2019-11-12 12:20:23 | 显示全部楼层
人肉再顶一下

出0入0汤圆

发表于 2019-11-12 12:24:51 | 显示全部楼层
几次想用c8051  就是看中他有DAC输出,,每次看到这个配置软件,头大,,我就又换成了STM32

出0入0汤圆

发表于 2019-11-12 14:15:52 | 显示全部楼层
zuu0 发表于 2019-11-12 12:24
几次想用c8051  就是看中他有DAC输出,,每次看到这个配置软件,头大,,我就又换成了STM32 ...

STM32你都会用,C8051对你来说不是小菜一碟么。那个配置软件还算是比较直观的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 00:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表