打印
[技术问答]

新唐FAQ问答汇总【来自牛卧堂】

[复制链接]
楼主: haolaishi
手机看帖
扫描二维码
随时随地手机跟帖
101
haolaishi 发表于 2014-11-26 22:48
问:N79E815芯片中dataflsh存储的数据,再次烧写falsh时候将被全部清除。有没有办法不被清
答:目前N79E81X ...

大哥,你可以帮我看一下我下面这段ISP断电保存的程序是哪里出错了吗?一直没有办法工作

bit EA_Save_bit = 1;

void Clear_BOF(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    PMCR &= 0xF3;
    TA = 0xAA;
    TA = 0x55;
        CHPCON = 0x3B;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Enable_ISP_Mode(void)
{
    /* Enable ISP  */
        ISPCN=0x30;
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON |= 0x01;
    EA = 1;
        Trigger_ISP();
}
//-----------------------------------------------------------------------------------------------------------
void Disable_ISP_Mode(void)
{
    /* Disable ISP */
        ISPCN=0x30;
        Trigger_ISP();
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON &= 0xFE;
    EA = 1;//EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_ISP(void)
{
    EA_Save_bit = EA;
    EA = 0;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    ISPTRG |= 0x01;//start
    EA = 1;//EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA(void)
{
    static uint u16Count;

    Enable_ISP_Mode();
    ISPCN = ERASE_ALL_DATA;

    for(u16Count=96;u16Count<128;u16Count++)
    {
        ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
        ISPAH = HIBYTE(u16Count*128);               // 每128字节/一页
                Trigger_ISP();
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Read_DATA(void)
{
        uchar j = 0;
        Enable_ISP_Mode();
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPCN = FLASH_READ_DATA;
        if(j < 4)
        {
        Trigger_ISP();               
                status_buff.flash_value[j] = ISPFD;

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
        j++;
        Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA(void)
{
        uchar j = 0;
    Enable_ISP_Mode();
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPCN = BYTE_PROGRAM_DATA;
        if(j < 4)
        {
                   ISPFD = status_buff.flash_value[j];
        Trigger_ISP();

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
        j++;
        Disable_ISP_Mode();
}

使用特权

评论回复
102
gejigeji521| | 2015-12-5 19:27 | 只看该作者
现在需要知道的是M0516何时将17个字节的数据发送完成,就是当第17个字节的数据的停止位发送完成以后,我需要马上知道,然后去关闭SP491的发送使能端。答:17个数据 往FIFO放,检测只要TX FIFO不满就往里面放数据  放17个等他发完产生空中断 空中断来了 才去关关闭SP491EN.

使用特权

评论回复
103
RAYINGPX| | 2019-8-30 11:37 | 只看该作者
MARK

使用特权

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

本版积分规则