ajfan 发表于 2019-11-10 21:55:14

C8051F340 PCA产生PWM和SPI0CN冲突

本帖最后由 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,连到端口引脚
}

ajfan 发表于 2019-11-11 09:05:04

人肉顶一下

modbus 发表于 2019-11-11 09:23:34

SPI0CN=0x01表示SPI工作于3线方式,无NSS管脚,PCA的CEX0管脚由P1.2变为P1.1管脚

ajfan 发表于 2019-11-11 11:16:30

大神啊,应该是这个忽略了,谢谢

wurst 发表于 2019-11-11 18:47:30

现在还有依旧用C8051F系列,当年8051的性能之王

ajfan 发表于 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功能正常)



ajfan 发表于 2019-11-12 12:20:23

人肉再顶一下

zuu0 发表于 2019-11-12 12:24:51

几次想用c8051就是看中他有DAC输出,,每次看到这个配置软件,头大,,我就又换成了STM32

jxcrgt35 发表于 2019-11-12 14:15:52

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

STM32你都会用,C8051对你来说不是小菜一碟么。那个配置软件还算是比较直观的。
页: [1]
查看完整版本: C8051F340 PCA产生PWM和SPI0CN冲突