C8051F340 PCA产生PWM和SPI0CN冲突

2020-01-12 17:15发布

本帖最后由 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,连到端口引脚
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。