打印
[DemoCode下载]

基于新唐N76E003的5W无线充方案

[复制链接]
828|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinpian101|  楼主 | 2024-6-23 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


WPC_QI_5W.zip (11.68 MB)
/* MAIN.C file
*
系统10ms唤醒一次,所有的计时都在主程序中进行
        10ms中断只做定时唤醒
        4组寄存器分配: main->page0   Wkt_ISR->page1  TimerCapture_ISR(QI协议解析)->page2  page3->not used
        N76E003AT20 的WDT是由选项字配置开启的,不需要软件初始化,目前不知道什么原因进入空闲后,WDT无法超时复位系统
        WKT->10ms中断
        Timer2->QI(capture) 遥控器解析         
*/

/*
           b7        b6        b5        b4        b3        b2         b1         b0
config0   CBS       Reserved  OCDPWM    OCDEN     Reserved  RPD        LOCK       Reserved     0xd9/0xe9   RST_PIN->P2.0  LOCK_EN
config1   Reserved  Reserved  Reserved  Reserved  Reserved  LDSIZE[2]  LDSIZE[1]  LDSIZE[0]    0xff
config2   CBODEN    Reserved  CBOV[1]   CBOV[0]   BOIAP     CBORST     Reserved   Reserved     0xff   2.2V
config3   Reserved  Reserved  Reserved  Reserved  Reserved  Reserved   Reserved   Reserved     0xff
config4   WDTEN[3]  WDTEN[2]  WDTEN[1]  WDTEN[0]  Reserved  Reserved   Reserved   Reserved     0x5f   超时复位,空闲不运行
*/

#include "includes.h"
#include "adc.h"
#include "qi.h"
#include "led.h"

bit BIT_TMP;

static bool tick_flag;
//=============================================================================
void SystemInit(void)
{
        CKDIV = 0;  //fosc = 16M  fCPU = 16M                                                                                                       
        tick_flag = true;
}
/************************************************************************************************************
*    WKT interrupt subroutine
************************************************************************************************************/
void Wkt_ISR(void) interrupt 17  using 1 //interrupt address is 008BH
{  
        clr_WKTF;
  tick_flag=true;
        QiTimeTickHook();
}

static void WKT_Init(void)
{
        RWK   = 156;    //10MS
  WKCON = 0x08;   //1分频  
        set_EWKT;       //使能wkt中断
}
//==========================================================
//==========================================================
#if(1)   //#ifndef   DEBUG
        #define IWDG_Feed()   set_WDCLR

        static void Iwdg_Init(void)
        {       
                //Setting WDT prescale
                TA=0xAA;TA=0x55;WDCON=0x07;                                                //Setting WDT prescale
                set_WDCLR;                                                                                                                //Clear WDT timer
                while((WDCON|~SET_BIT6)==0xFF);                                //confirm WDT clear is ok before into power down mode       
        }
#else
        #define IWDG_Feed()   
        #define Iwdg_Init()
#endif
//=============================================================================
void main(void)
{
        clr_WDTRF;
        clr_BORF;
        Iwdg_Init();
        Delayms(1);
        SystemInit();
       
        InitAdc();
        WKT_Init();
        LedInit();
        QiInit();
       
        EA = 1;

        while(1)
        {
                IWDG_Feed();
                WPC_Qi();
                if(tick_flag)
                {
                        tick_flag = false;
                  LedFunction();
                }
        }
}
//===================================================================
//end files


使用特权

评论回复
沙发
xinpian101|  楼主 | 2024-6-23 21:57 | 只看该作者
附件中包含软硬件方案。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

1493

帖子

1

粉丝