社区导航

 

搜索
查看: 10314|回复: 7

[求助] 瑞萨单片机入门

[复制链接]

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2016-3-23 13:18 | 显示全部楼层 |阅读模式
新入职一家芯片代理公司做fae,这两天给了我一个R5F10268的板子然后给了个例子叫我熟悉一下,但是C语言和单片机的只是掌握的一般,现在看着这个程序完全没有头绪,公司老的工程师又都在外面没人能教,有坛友帮我解释下这个程序的功能吗?

10268PFDL.7z

53.33 KB, 下载次数: 212


回复

使用道具 举报

4033

TA的帖子

233

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2016-3-23 13:27 | 显示全部楼层
建议把程序嵌入到帖子内显示
然后就是把不懂的地方说明一下,大家可以更好帮助你

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2016-3-23 13:41 | 显示全部楼层
#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失败、调用错处理函数(复位)
}

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2016-3-23 13:47 | 显示全部楼层
单条的命令基本能看懂,但是比如main函数实现了什么功能就有点懵了

回复

使用道具 举报

53

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2016-5-16 17:25 | 显示全部楼层
r01us0049ej0104_rl78.pdf (915.36 KB, 下载次数: 265)

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

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

回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2016-10-10 20:42 | 显示全部楼层
调用Type04 的库,对数据闪存的读写等一些操作,单个函数功能在库中对应的地方有注释~

回复

使用道具 举报

29

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2016-11-9 11:59 | 显示全部楼层
你公司也是扯JB蛋,既然让你看这个,说明文档肯定要提供的吗,何况这本来也是瑞萨官网下来

回复

使用道具 举报

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

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-4 08:31 , Processed in 0.287302 second(s), 29 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表