Registerbeschreibung FM3 Spansion MB9B520M

OP #4381522
Lesenswert?

hallo

arbeite mich gerade ind den 32 bit Controller ein.
Habe den FM3 Sapnsion MB9B520/524 Controller.

Die FM3 haben Multifunkions Register.

"EPFR" oder
"PFR0"
usw .
Finde keine Beschreibung der Register.
Wo finde ich sowas,oder gibt es ein Software Programm für Win ?

Finde natürlich sehr viel ..

Franz
OP #4381776
Lesenswert?

void InitUart0(void)
{
  FM3_GPIO->ADE = 0x00FF;
  // Initialize ports for UART0
  FM3_GPIO->PFR2 |= (1 << 0x01) | (1 << 0x02);   // P21->SIN0_0, 
P22->SOT0_0
  FM3_GPIO->EPFR07 |= (1 << 6);                  // Use SIN0_0, SOT0_0

  // Initialize UART asynchronous mode
  FM3_MFS0_UART->SCR =  0x80;   // UART reset
  FM3_MFS0_UART->SMR =  0x01;   // serial data output enable, operation 
mode 0
  FM3_MFS0_UART->SSR =  0x00;   // 0x80 = clear receive error flag
  FM3_MFS0_UART->ESCR = 0x00;


  FM3_MFS0_UART->BGR = (36000000 / 115200 - 1);  // 115.2kbaud

  FM3_MFS0_UART->SCR |= 0x03;   // RX, TX enable
}

/**
 ************************************************************************ 
******
 ** \brief  Main function of project for MB9B520M series.
 **
 ** \param  none
 ** \return uint32_t return value, if needed
 ************************************************************************ 
******/
 void PutCharUart0(uint8_t u8Char)
{
  while (!(FM3_MFS0_UART->SSR & (1 << 1)));   // wait for transmit 
buffer empty
  FM3_MFS0_UART->TDR = u8Char;                // put u8Char into buffer

  if ('\n' == u8Char)
  {
    while (!(FM3_MFS0_UART->SSR & (1 << 1))); // wait for transmit 
buffer empty
    FM3_MFS0_UART->TDR = '\r';                // put '\r' into buffer
  }
}

Gerade hier habe ich noch Probleme.

ADE sind die Analogen Ports ?
PFR2  ???    wie ist hier die zuordnung zu den Port Pins ?
EPFR07 ???


 FM3_GPIO->ADE = 0x00FF;
  // Initialize ports for UART0
  FM3_GPIO->PFR2 |= (1 << 0x01) | (1 << 0x02);   // P21->SIN0_0, 
P22->SOT0_0
  FM3_GPIO->EPFR07 |= (1 << 6);
#4381845
Lesenswert?

- FM3 PERIPHERAL MANUAL

4.6 Analog Input Setting Register (ADE)
This register sets analog input pins from AN31 to AN00.

Bit == 0 - digital

4.1. Port Function Setting Register (PFRx)

List of PFR Register Configuration

PFR2 = P2F to P20

- MB9B520M series, Datasheet
P21==
SIN0_0
INT06_1
WKUP2
BIN1_1
AN14

Ich arbeite nicht mit dem Board. Aber ich hoffe, dies hilft dir bei den 
Dokumenten.
#4381988
Lesenswert?

Franz S. schrieb:
> Wie setzte ich den PortPin dann auf die verschiede Modis ?

Franz S. schrieb:
> FM3_GPIO->EPFR07 |= (1 << 6);                  // Use SIN0_0, SOT0_0

- FM3 PERIPHERAL MANUAL

4.15. Extended Pin Function Setting Register 07 (EPFR07)

Bit 6/7
SOT0B

[bit7:6] SOT0B: SOT0 Input/Output Select bits
Selects input/output for SOT0.

Du gehst bei deinem Code von einem Initvalue von 0b00 aus. (Schlechte 
Idee)
D.h. der Befehl oben erzeugt 0b01

Uses SOT0_0 at the input pin of MFS ch.0 SOT.
Uses SOT0_0 at the output pin

Aufgrund des obigen Kommentares gehe ich auch davon aus, dass SIN0S auf 
default angenommen wird.
[bit5:4] SIN0S: SIN0 Input Select bits
Selects input for SIN0
0b00 Uses SIN0_0 at the input pin of MFS ch.0 SIN. [Initial value]
#4385995
Lesenswert?

Hi Franz,
hab auch das selbe Board von Glyn (ADAM43-LCN-WQ-EDT-FM3).
Ich hab mit folgenden Code die UART3 Schnittstelle zum laufen bekommen.
1
void InitUart3(void)
2
{
3
  // Initialize ports for UART0
4
  FM3_GPIO->PFR5 |= (1 << 0x00) | (1 << 0x01);    // P50->SIN3_1, P51->SOT3_1
5
  FM3_GPIO-> EPFR07 |= (1 << 23) | (1<<25);       // Use SIN3_1, SOT3_1  
6

7
  // Initialize UART asynchronous mode
8
  FM3_MFS3_UART->SCR =  0x80;   // UART3 reset
9
  FM3_MFS3_UART->SMR =  0x01;   // serial data output enable, operation mode 0
10
  FM3_MFS3_UART->SSR =  0x00;   // 0x80 = clear receive error flag
11
  FM3_MFS3_UART->ESCR = 0x00;    
12
  
13
  // Baud Rate Generator Registers
14
  FM3_MFS3_UART->BGR = 36000000 / 9600 - 1;    // 9.6 kbaud @ 36 MHZ
15
  //FM3_MFS3_UART->BGR = 36000000 / 14400 - 1;   // 14.4 kbaud @ 36 MHZ
16
  //FM3_MFS3_UART->BGR = 36000000 / 19200 - 1;   // 19.2 kbaud @ 36 MHZ
17
  //FM3_MFS3_UART->BGR = 36000000 / 28800 - 1;   // 28.8 kbaud @ 36 MHZ
18
  //FM3_MFS3_UART->BGR = 36000000 / 38400 - 1;   // 38.4 kbaud @ 36 MHZ
19
  //FM3_MFS3_UART->BGR = 36000000 / 56000 - 1;   // 56.0 kbaud @ 36 MHZ
20
  //FM3_MFS3_UART->BGR = 36000000 / 57600 - 1;   // 57.6 kbaud @ 36 MHZ
21
  //FM3_MFS3_UART->BGR = 36000000 / 115200 - 1;  // 115.2 kbaud @ 36 MHz
22
  //FM3_MFS3_UART->BGR = 36000000 / 128000 - 1;  // 128.0 kbaud @ 36 MHz
23
  //FM3_MFS3_UART->BGR = 36000000 / 256000 - 1;  // 256.0 kbaud @ 36 MHz
24
  FM3_MFS3_UART->SCR |= 0x03;   // RX, TX enable
25

26
  // UART0 interrupt settings
27
  NVIC_ClearPendingIRQ(MFS3RX_IRQn);
28
  NVIC_EnableIRQ(MFS3RX_IRQn);
29
  NVIC_SetPriority(MFS3RX_IRQn, 1);
30
 // FM3_MFS3_UART->SCR |= 0x10;   // Enable Reception IRQ (RIE) UART3
31
}
32

33
void PutByteUart3(uint8_t u8Char)
34
{
35
  while (!(FM3_MFS3_UART->SSR & (1 << 1)));   // wait for transmit buffer empty 
36
  FM3_MFS3_UART->TDR = u8Char;                // put u8Char into buffer
37
 
38
}
39

40
void MFS3RX_IRQHandler(void)
41
{ 
42
  if ((FM3_MFS3_UART->SSR & 0x38) != 0)  // Check for errors PE, ORE, FRE
43
  {
44
    FM3_MFS3_UART->SSR |= (1 << 7);      // Clear error flags 
45
    FM3_MFS3_UART->RDR;         // Flush RDR
46
  }
47
  
48
  if (FM3_MFS3_UART->SSR & 0x04) 
49
  {
50
    RX_data = FM3_MFS3_UART->RDR;         // RDR --> Received Data Register
51
  }
52
}

Hast du schon was mit dem internen Work Flash gemacht?
Die automatischen Schreiberoutinen die in den AN angesprochen werden 
funktionieren nur bedingt bei mir.
Nach dem löschen eines Sektors im Work Flash Bereich springt der 
Programmcounter plötzlich auf die Adresse 0xFFFFFFFE und der Controller 
macht nichts mehr. Die selben Routinen funktionieren aber für den Main 
Flash Bereich ohne Probleme. Setze ich einen Breakpoint direkt nach dem 
letzten Befehl der automatischen Löschroutinen funktioniert das löschen 
auch im Work Flash Bereich.

Würde mich mal interessieren ob das einer hier schon zum laufen bekommen 
hat.
Oder ob jemand die selben Probleme hat.

AN zu finden unter
https://www.spansion.com/downloads/MB9AB40N_MN706-00019-E.pdf
(Type 9).

Lg
Sven
#4387999
Lesenswert?

Moin Franz,

nein genau das selbe Board hab ich nicht aber ein ähnliches.
Bei mir ist der Controller (MB9BF524K) und der EVE Chip (FT801) auf der 
selben Platine und mit dem Display verklebt.

Die genaue Bezeichnung des Boards ist:
ADAM43-LCN-WQ-EDT-FM3

Info im Netz unter:
http://www.glyn.de/data/glyn/media/doc/ADAM43-LCN-WQ-EDT-FM3.pdf

Das Board hat nur eine USB Buchse für Spannungsversorgung und zum 
Programmieren. Daher kann ich nichts zu der USB Schnittstelle sagen.

Mfg
Sven
OP #4389720
Lesenswert?

Hallo
Habe diese Routine ,aber läuft nicht.

Sollte eigendlich auf PIN 27 was senden.

??


void InitUart1(void)
{
  FM3_GPIO->ADE = 0x00FF;// Ad -Wandler
  // Initialize ports for UART0
  FM3_GPIO->PFR1 |= 0x000E;       // P11->SIN1_1, P12->SOT1_1, 
P13->SCK1_1
  FM3_GPIO->EPFR07 |= 0x0000A800; // Use SIN1_1, SOT1_1, SCK1_1

  // Initialize UART asynchronous mode

  FM3_MFS1_UART->SCR =  0x80;   // UART reset
  FM3_MFS1_UART->SMR =  0x01;   // serial data output enable, operation 
mode 0
  FM3_MFS1_UART->SSR =  0x00;   // 0x80 = clear receive error flag
  FM3_MFS1_UART->ESCR = 0x00;

//  FM3_MFS1_UART->BGR = (36000000 / 115200 - 1);  // 115.2kbaud
  FM3_MFS1_UART->BGR = (36000000 / 9600 - 1);  // 115.2kbaud
  FM3_MFS1_UART->SCR |= 0x03;   // RX, TX enable

}





/*********************************************************************** 
******

*  DESCRIPTION:    sends a single character (no timeout!)

*

*  PARAMETERS:     Character

*

*  RETURNS:        None

************************************************************************ 
*****/

void PutCharUart1(uint8_t u8Char)
{
  while (!(FM3_MFS1_UART->SSR & (1 << 1)));   // wait for transmit 
buffer empty
  FM3_MFS1_UART->TDR = u8Char;                // put u8Char into buffer
  if ('\n' == u8Char)
  {
    while (!(FM3_MFS1_UART->SSR & (1 << 1))); // wait for transmit 
buffer empty
    FM3_MFS1_UART->TDR = '\r';                // put '\r' into buffer
  }
}

/*********************************************************************** 
******
*  DESCRIPTION:    sends a complete string (0-terminated)
 *
*  PARAMETERS:     Pointer to (constant) file of bytes in mem
*
*  RETURNS:        None
************************************************************************ 
*****/

void PutStringUart1(uint8_t *pu8Buffer)
{
  while (*pu8Buffer != '\0')
  {
    PutCharUart1(*pu8Buffer++);        // send every char of string
  }
}


/*********************************************************************** 
******

*  DESCRIPTION:    returns incoming character, if received

*

*  PARAMETERS:     None

*

*  RETURNS:        Character or 0xFF (Error) or 0 (Nothing)

************************************************************************ 
*****/

uint8_t GetCharUart1(void)
{
  uint8_t u8Char;

  if ((FM3_MFS1_UART->SSR & 0x38) != 0)  // Check for errors PE, ORE, 
FRE
  {
    FM3_MFS1_UART->SSR |= (1 << 7);      // Clear error flags
    u8Char = FM3_MFS1_UART->RDR;         // Flush RDR
    return 0xFF;
  }
  else if (FM3_MFS1_UART->SSR & 0x04)    // RDRF?
  {
    u8Char = FM3_MFS1_UART->RDR;
    if ('\r' == u8Char)
    {
      u8Char = '\n';
    }
    return (u8Char);
  }
  else
  {
    return 0;
  }
}
Gast #4391320
Lesenswert?

Hier war das Problem .

  FM3_GPIO->ADE = 0x0000;// Ad -Wandler
  FM3_GPIO->PFR1 |= 0x000E;       // P11->SIN1_1, P12->SOT1_1, 
P13->SCK1_1

  FM3_GPIO-> EPFR07 |= (1 << 11) | (1<<13);   // Use SIN1_1, SOT1_1 no 
CLK
Gast #4577646
Lesenswert?

Hast Du gesehen, dass es eine Seite gibt, die UART Beispiele für alle FM 
MCUs anbietet? www.io-expert.com/fm_examples/index.shtml leider sind da 
nicht so viele Beispiele drauf, aber was mit UART. Vielleicht kommt ja 
noch mehr.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren