⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm25640_m16.c

📁 FM25640 FRAM code for renesas M16c...I coded and optimized (-:cool:-)
💻 C
字号:
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// FM25640 Fram Routines
//
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
void init_SPI_4(void)
{
    prcr  = 7;                  // Protect OFF
    s4ic  = 0;  //disable int.
    //s4c   = 0x79;               // (1) f8 internal-clock
    prc2=1;
	s4c   = 0x68;               // (1) f1 internal-clock

        /*
		  01100000; 	// SI/O S3C,S4C
		  ||||||||__smi0____ SM1SM0 internal clock select
	   	  |||||||___smi1____ 00:F1, 01:F1/8 10:f1/32 11:Do not select
	   	  ||||||____smi2____ SOUTi Output Disable.. 0:SOUT enabled 1:High Emp.
	  	  |||||_____smi3____ S I/Oi Port Select Bit..1 : SOUTi output, CLKi function, 0:normal I/O
	   	  ||||______smi4____ CLK Polarity Select Bit..0 : Transmit data is output at falling edge of transfer clock and receive data is input at rising edge
	   	  |||_______smi5____ Transfer Direction Select Bit..0 : LSB first, 1 : MSB first
	   	  ||________smi6____ Synchronous Clock Select Bit..0 : External clock  1 : Internal clock
	  	  |_________smi7____ SOUTi Initial Value Set Bit..Effective when SMi3 = 0  0 : low output, 1 : high output
    */
	s4brg = 0x9;               // (2) Set BRG f1/11 mhz
	/*--- Initialize peripheral clock select register default f1---*/
    prcr = 0;                   // Protect ON
    s4ic  = 0;                  //     LV = 0
    ifsr  &=b00111111;          //int4,5 / SIO3, SIO4 int  select
}
char TX_RX_SIO4(char c)
{
    s4trr=c;
    while(ir_s4ic==0);
    __nop;__nop;__nop;__nop;__nop;__nop;__nop;__nop;__nop;__nop;
    s4ic=0;
    c=s4trr;
    return c; 
}


void fm25640_init(void)
{
    prc2=1;cs_dir_ee=1;cs_ee=1;
    init_SPI_4();

}
char fm25640_read_status(void)
{
    char a;
    //RDSR=5 read status
    cs_ee=0;
    TX_RX_SIO4(5);
    a=TX_RX_SIO4(0);
    cs_ee=1;
    return a;
}

void fm25640_write_disable(void)
{
    //WRDI=4 write disable
    //Bit   7   6 5 4 3   2    1  0
    //Name WPEN 0 0 0 BP1 BP0 WEL 0
    cs_ee=0;
    TX_RX_SIO4(4);
    cs_ee=1;
}
void fm25640_write_enable(void)
{
    //WRDI=6 write enable
    //Bit   7   6 5 4 3   2    1  0
    //Name WPEN 0 0 0 BP1 BP0 WEL 0
    cs_ee=0;
    TX_RX_SIO4(6);
    cs_ee=1;
}
void fm25640_write_status(void)
{
    //WRSR=1 write status
    //Bit   7   6 5 4 3   2    1  0
    //Name WPEN 0 0 0 BP1 BP0 WEL 0
    fm25640_write_enable();
    cs_ee=0;
    TX_RX_SIO4(1);
    TX_RX_SIO4(0);  //write enable no protect
    cs_ee=1;
}
void fm25640_write_mem(unsigned int adr,char dt)
{
    //Write=2 write mem
    fm25640_write_enable();
    cs_ee=0;
    TX_RX_SIO4(2);
    TX_RX_SIO4((char)(adr>>8));
    TX_RX_SIO4((char)(adr & 0xff));
    TX_RX_SIO4(dt);
    cs_ee=1;
}
char fm25640_read_mem(unsigned int adr)
{
    char a;
    //Read=3 read mem
    cs_ee=0;
    TX_RX_SIO4(3);
    TX_RX_SIO4((char)(adr>>8));
    TX_RX_SIO4((char)(adr & 0xff));
    a=TX_RX_SIO4(0xff);
    cs_ee=1;
    return a;
}
unsigned char FM25640_test(unsigned char c)
{
    unsigned char h;
   // unsigned int i;
    /*for (i=0;i<8192;i++)
    {
        fm25640_write_mem(i,(char)i&0xff);
        h=fm25640_read_mem(i);
        if(h!=(char)(i&0xff)) {i=9999;break;};
    }*/
    fm25640_write_mem(1023,c);
    h=fm25640_read_mem(1023);
    return h;   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -