13880|7

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

瑞萨单片机入门 [复制链接]

新入职一家芯片代理公司做fae,这两天给了我一个R5F10268的板子然后给了个例子叫我熟悉一下,但是C语言和单片机的只是掌握的一般,现在看着这个程序完全没有头绪,公司老的工程师又都在外面没人能教,有坛友帮我解释下这个程序的功能吗?

10268PFDL.7z

53.33 KB, 下载次数: 243

最新回复

你公司也是扯JB蛋,既然让你看这个,说明文档肯定要提供的吗,何况这本来也是瑞萨官网下来  详情 回复 发表于 2016-11-9 11:59
点赞 关注

回复
举报

5260

帖子

239

TA的资源

管理员

沙发
 
建议把程序嵌入到帖子内显示
然后就是把不懂的地方说明一下,大家可以更好帮助你
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
#pragma sfr
#pragma DI
#pragma EI
#pragma NOP
#pragma STOP

/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "pfdl.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
pfdl_descriptor_t my_pfdl_descriptor_t;         
pfdl_status_t my_pfdl_status_t;           
pfdl_request_t my_pfdl_request_t;         

void ERROR_Handler(void);
void PFDL_Init(void);
void PFDL_Write(unsigned int Flash_index,unsigned int Data_Count);
unsigned char PFDL_BlankCheck(unsigned int Flash_index,unsigned int Length);   
void PFDL_Erase(unsigned int Flash_index);   
unsigned char PFDL_Iverify(unsigned int Flash_index,unsigned int Length);
void PFDL_Read(unsigned int Flash_index,unsigned int Data_Count);

unsigned char Execute_status;   
signed char W_DataFla_buff[100] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                                                                   11,12,13,14,15,16,17,18,19,20,
                                                                   21,22,23,24,25,26,27,28,29,30,
                                                                   31,32,33,34,35,36,37,38,39,40,
                                                                   41,42,43,44,45,46,47,48,49,50,
                                                                   51,52,53,54,55,56,57,58,59,60,
                                                                   61,62,63,64,65,66,67,68,69,70,
                                                                   71,72,73,74,75,76,77,78,79,80,
                                                                   81,82,83,84,85,86,87,88,89,90,
                                                                   91,92,93,94,95,96,97,98,99,100
                                                                         };      
signed char R_DataFla_buff[100];  
unsigned int dat=0;
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

void init_clock()
{
   /*Internal HighOSC and SubOSC*/                              
        CMC = 0X00;  //1M<=X1<=10M,XT1 oscillation,with option-byte                                      
        CKC = 0x00;        //system CLK is InternalHighosc                                 
        CSC = 0x80;        //X1 stop               
        OSMC = 0x00;       //itterval timer
        //HOCODIV=0x05;      //1M
}

void init_port()
{
/*******         
    PM2.1=0;
    PM2.2=0;
    PM2.3=0;
    PM1.0=0;
    P2.1=1;
    P2.2=1;
    P2.3=1;
    P1.0=1;
    ADPC=0x02;
    PMC1.0=0;
**********/
   ADPC=0x01;
  PM2.2=0;
  P2.2=1;
}

/***********************************************************************************************************************
* Function Name: main
* Description  : This function implements main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void main(void)
{       
       
    /* Start user code. Do not edit comment generated here */
    DI();
        PFDL_Init();     //使用前的初始化
        Execute_status = PFDL_BlankCheck(0x0000,1024);//空白检测
        if (Execute_status == 0x1b)
        {
                PFDL_Erase(0x0000);                                        //擦除
        }   
        PFDL_Write(0x0000,100);                                           //写数据
        Execute_status = PFDL_Iverify(0x0000,1024);//校验
        if (Execute_status == 0x1b)
        {
                return;   
        }     
        //PFDL_Read(0x0010,100);                                    //读数据
        PFDL_Close();                                                        //在不使用这个库的时候,需要关闭
  
    init_clock();
    init_port();
        EI();
        /******
        for(i=0;i<10;i++)
        {
        if(R_DataFla_buff[i]==R_DataFla_buff[i])
                {count++;}
        if(count==10)
                {P2.1=0;}
        }
        if(R_DataFla_buff[1]==9)
        {
                P2.2=0;
        }******/
       while (1U)
      {
                  
      }
    /* End user code. Do not edit comment generated here */
}

/* Start user code for adding. Do not edit comment generated here */
void ERROR_Handler(void)
{
        WDTE = 0xAC;   
}       
void PFDL_Init(void)
{
        my_pfdl_descriptor_t.fx_MHz_u08 = 1;                                           //1MHz, must be integer     
        my_pfdl_descriptor_t.wide_voltage_mode_u08 = 0x01;          //00: full-speed mode, 01 wide voltage mode   
        my_pfdl_status_t = PFDL_Open((__near pfdl_descriptor_t*) &my_pfdl_descriptor_t);  
        if (my_pfdl_status_t != PFDL_OK) ERROR_Handler();   
}

unsigned char PFDL_BlankCheck(unsigned int Flash_index,unsigned int Length)
{
        my_pfdl_request_t.index_u16 = Flash_index;        
        my_pfdl_request_t.bytecount_u16 = Length;   
        my_pfdl_request_t.command_enu = PFDL_CMD_BLANKCHECK_BYTES;  
        my_pfdl_status_t = PFDL_Execute(&my_pfdl_request_t);             
        do
        {
                my_pfdl_status_t = PFDL_Handler();
        }
        while(my_pfdl_status_t == PFDL_BUSY);            
        return (my_pfdl_status_t);   
}

void PFDL_Erase(unsigned int Flash_index)                                   //Erase函数
{
        my_pfdl_request_t.index_u16 = Flash_index;                       //Erase地址      
        my_pfdl_request_t.command_enu = PFDL_CMD_ERASE_BLOCK;   //Erase命令
        my_pfdl_status_t = PFDL_Execute(&my_pfdl_request_t);    //Erase执行函数                      
        do
        {
                my_pfdl_status_t = PFDL_Handler();
        }
        while(my_pfdl_status_t == PFDL_BUSY);                                     //等待        Erase完毕
        if (my_pfdl_status_t != PFDL_OK)
        {
                ERROR_Handler();      //如果Erase失败、调用错处理函数(复位)       
        }
       
}

void PFDL_Write(unsigned int Flash_index,unsigned int Data_Count)        //写函数
{
        my_pfdl_request_t.index_u16 = Flash_index;                                                //Write地址
        my_pfdl_request_t.data_pu08 = W_DataFla_buff;                                     //Write缓存首地址
        my_pfdl_request_t.bytecount_u16 = Data_Count;                                   //Write数据长度
        my_pfdl_request_t.command_enu = PFDL_CMD_WRITE_BYTES;                          //Write命令
        my_pfdl_status_t = PFDL_Execute(&my_pfdl_request_t);                      //Write执行函数
        do
        {
                my_pfdl_status_t = PFDL_Handler();
        }
        while(my_pfdl_status_t == PFDL_BUSY);                                                     //等待Write完毕
        if (my_pfdl_status_t != PFDL_OK)  ERROR_Handler();                             //如果Write失败、调用错处理函数(复位)
}

unsigned char PFDL_Iverify(unsigned int Flash_index,unsigned int Length)//Iverify函数
{
        my_pfdl_request_t.index_u16 = Flash_index;                                                //Iverify地址
        my_pfdl_request_t.bytecount_u16 = Length;                                                         //Iverify数据长度
        my_pfdl_request_t.command_enu = PFDL_CMD_IVERIFY_BYTES;                          //Iverify命令
        my_pfdl_status_t = PFDL_Execute(&my_pfdl_request_t);                               //Iverify执行函数
        do
        {
                my_pfdl_status_t = PFDL_Handler();
        }
        while(my_pfdl_status_t == PFDL_BUSY);                                                             //等待Iverify完毕
        return (my_pfdl_status_t);  
}   

void PFDL_Read(unsigned int Flash_index,unsigned int Data_Count)                //Read函数
{
        my_pfdl_request_t.index_u16 = Flash_index;                                                        //Read地址
        my_pfdl_request_t.data_pu08 = R_DataFla_buff;                                             //Read缓存首地址
        my_pfdl_request_t.bytecount_u16 = Data_Count;                                           //Read数据长度
        my_pfdl_request_t.command_enu = PFDL_CMD_READ_BYTES;                                  //Read命令
        my_pfdl_status_t = PFDL_Execute(&my_pfdl_request_t);                              //Read执行函数
        do
        {
                my_pfdl_status_t = PFDL_Handler();
        }
        while(my_pfdl_status_t == PFDL_BUSY);                                                             //等待Read完毕
        if (my_pfdl_status_t != PFDL_OK)  ERROR_Handler();                                     //如果Read失败、调用错处理函数(复位)
}
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

4
 
单条的命令基本能看懂,但是比如main函数实现了什么功能就有点懵了
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(中级)

5
 
r01us0049ej0104_rl78.pdf (915.36 KB, 下载次数: 297)

r01us0049ej0104_rl78.pdf (915.36 KB, 下载次数: 297)

看你好像调用了FDLRL78 Type04库里面的函数,这是一个flash模拟eeprom的库,具体的可以看资料
这个是瑞萨官方的资料
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

6
 
堕落小生 发表于 2016-5-16 17:25
看你好像调用了FDLRL78 Type04库里面的函数,这是一个flash模拟eeprom的库,具体的可以看资料
这 ...

恩恩,十分感谢,我当时是想知道具体单个函数的讲解,我先看看资料吧
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 
调用Type04 的库,对数据闪存的读写等一些操作,单个函数功能在库中对应的地方有注释~
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

8
 
你公司也是扯JB蛋,既然让你看这个,说明文档肯定要提供的吗,何况这本来也是瑞萨官网下来
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表