Página 1 de 1

RTC LPC2148

MensagemEnviado: 11 Nov 2009 11:29
por fabim
RTC LPC2148.

Psoar, peguei um exemplo de estrutura para o RTC do 2148, e até então eu compreendi perfeitamente.

Looken!

Código: Selecionar todos
 typedef struct
{
  REG_8 ilr;                 // Interrupt Location Register
  REG_8 _pad0[3];     
  REG16 ctc;                // Clock Tick Counter
  REG16 _pad1;
  REG_8 ccr;                // Clock Control Register
  REG_8 _pad2[3];
  REG_8 ciir;               // Counter Increment Interrupt Register
  REG_8 _pad3[3];
  REG_8 amr;              // Alarm Mask Register
  REG_8 _pad4[3];
  REG32 ctime0;          // Consolidated Time Register 0
  REG32 ctime1;          // Consolidated Time Register 1
  REG32 ctime2;          // Consolidated Time Register 2
  REG_8 sec;               // Seconds Register
  REG_8 _pad5[3];
  REG_8 min;              // Minutes Register
  REG_8 _pad6[3];
  REG_8 hour;             // Hours Register
  REG_8 _pad7[3];
  REG_8 dom;             // Day Of Month Register
  REG_8 _pad8[3];
  REG_8 dow;              // Day Of Week Register
  REG_8 _pad9[3];
  REG16 doy;              // Day Of Year Register
  REG16 _pad10;
  REG_8 month;          // Months Register
  REG_8 _pad11[3];
  REG16 year;             // Years Register
  REG32 _pad12[8];
  REG_8 alsec;            // Alarm Seconds Register
  REG_8 _pad13[3];
  REG_8 almin;           // Alarm Minutes Register
  REG_8 _pad14[3];
  REG_8 alhour;         // Alarm Hours Register
  REG_8 _pad15[3];
  REG_8 aldom;         // Alarm Day Of Month Register
  REG_8 _pad16[3];
  REG_8 aldow;          // Alarm Day Of Week Register
  REG_8 _pad17[3];
  REG16 aldoy;          // Alarm Day Of Year Register
  REG16 _pad18;
  REG_8 almon;         // Alarm Months Register
  REG_8 _pad19[3];
  REG16 alyear;         // Alarm Years Register
  REG16 _pad20;
  REG16 preint;          // Prescale Value Register (integer)
  REG16 _pad21;
  REG16 prefrac;         // Prescale Value Register (fraction)
  REG16 _pad22;
} rtcRegs_t;


Mais aí eu fiquei imaginando uma forma de anexar esta struct, ou fazer um union apontando o primeiro byte para o ILR.

E depois tipo, fazer uma rotina que eu altero o que eu quero, e reescrevo por cima de tudo novamente, que seria uma linda abrobrice.

No keil, tem como eu fazer uma união do byte[0] = byte[0]do ILR ?

E quando eu por exemplo.

retRegs_t.dow = XXX;

O keil ja saber que eu estou acessando o BYTE, N. que é o dia da semana ?
Ou seja, ficaria uma extrutura de anexo de endereços.

Alguem ja fez algo semelhante e funcionou ?

Fabim

MensagemEnviado: 11 Nov 2009 11:43
por Djalma Toledo Rodrigues
Ponteiro ?
.

MensagemEnviado: 11 Nov 2009 11:45
por fabim
é pode ser, eu ja enxerguei assim.
MAis no meu caso, queria tipo uma union, mais não estou conseguindo mentalizar como.

MensagemEnviado: 11 Nov 2009 11:59
por Red Neck Guy
ultimamente eu tenho optado por estruturas que jogo pra lá e pra cá.

algo como:

typedef struct{
unsigned char bla_01,bla_02,bla_03,bla_04;
}sBlaBlaBla;

e digamos que tem um lugar na memória que eu queira acessar
de forma "formatada segunda essa estrutura"
...
//daí crio um ponteiro para a estrutura em questão:

sBlaBlaBla *minhaVar;


minhaVar = (sBlaBlaBla *)&variavel_ou_struct_que_por_algum_motivo_quero_acessar_assim;

...
pronto
...

minhaVar acessa aquela área de memória de forma "formata".

MensagemEnviado: 11 Nov 2009 12:01
por Djalma Toledo Rodrigues
Você pretende fazer isso no Programa Fonte ?

Aí não é Ponteiro.

Seria como no Word localiza / substitui

Localiza retRegs_t.dow = XXX; substitui por retRegs_t.dow = YYY;

(Word sem formatação, claro)
.

MensagemEnviado: 11 Nov 2009 12:36
por tcpipchip
Isto ?

Código: Selecionar todos
typedef struct estrutura
{
  unsigned char REG_1;
  unsigned int  REG_2;
};

struct estrutura *point_estrutura;

void main() {

(*point_estrutura).REG_1=33;


  while(TRUE) {};
}

MensagemEnviado: 11 Nov 2009 12:42
por fabim
á só, intão.
Peguei o UM214X, e observei o que eu tinha desconfiado, mais sem afirmação.
Os dados do RTC são serializados, por isso a estrutura ocupa exatamente Nbytes daquela região.

no keil, "ja li o help" li o scambal, quando tento abrir "o keil executou uma instrução ilegal blablabla". Mesmo abrindo direto, que o ja fiz, é bem longe de ser intuitivo..rsrsrs

struct{

// estrutura RTC
} RTC_VARS; volatile absolute org "0xendereço do IRL que é o primeiro byte do busão".

No keil, comé que fala que é volatil, e para apontar para o valor absoluto, partindo do endereço blabla?
Ou boiei feio agora ?

Pois no PIC, para usb eu fiz algo parecido com a ideóta à cima, e ficou tinindo de bão sô.

Abraços

MensagemEnviado: 11 Nov 2009 12:51
por msamsoniuk
o ruim do fabim eh que ele escreve como o pato donald fala, entao nao consigo realmente entender o que ele quer perguntar... mas nos 68k/ppc com io mapeado em memoria seria:

Código: Selecionar todos
typedef struct
{
  unsigned char ble;
  unsigned char bli;
  unsigned char blo;
} bla;

volatile bla *blu = (bla *)0xFFFFE000; // essa eh a parte importante!

...

(blu->ble)++;

while(bli->ble)
{
   blu->blo = 1;
}


onde obviamente ble, bli, blo sao tres registros de io linearmente mapeados a partir do endereco 0xFFFFE000... e eh isso ae.

tcpipchip escreveu:Isto ?

Código: Selecionar todos
typedef struct estrutura
{
  unsigned char REG_1;
  unsigned int  REG_2;
};

struct estrutura *point_estrutura;

void main() {

(*point_estrutura).REG_1=33;


  while(TRUE) {};
}

MensagemEnviado: 11 Nov 2009 19:56
por fabim
agora eu tendeu, ;-)

Ta vendo qua que que que qui que qua ?

o ponteiro aponta para aquele endereço inicial, e a estrutura se encarrega de colocar os bytes nos seus devidos lugares.
Cara vou ser sincero, eu ja tinha visto algo igual em sources de exemplos que eu peguei, até mesmo o nosso amigo colocou algo parecido lá encima.
Eu estava mentalizando algo parecido, só que tudim na unha. Jamais que ia imaginar que o ansi aceita que uma estrutura tambem pode ser um ponteiro.
Tks all.
Assim que eu acabar eu coloco aqui pro pessoal dar uma olhada de como ficou, e dar uns pitecos tambem.

Brigadão a todos, e que a mãe diná os pague, pois eu estou quebrado.

ab´s
Fabim

MensagemEnviado: 11 Nov 2009 22:43
por msamsoniuk
dah um zoio nisso:

http://www.koders.com/c/fidBE33E9230FF6 ... s=crc#L262

eh dificil saber onde eh apenas software e onde eh apenas hardware, pq eh soh ponteiro de estrutura para tudo que eh lado! eles levaram o io mapeado em memoria tao a serio que todos os perifericos estao conectados ao core atraves de uma memoria ram dual-port, de modo que o powerpc coloca parametros de um lado e do outro lado um controlador de io inteligente mastiga os parametros.

e nem eh um conceito novo... na decada de 80 a motorola comercializava a familia 6812x de perifericos inteligentes para 68000, que tinha justamente um mcu 6801, memoria ram dual-port para o 68000 falar com o 6801 e alguns perifericos para o 6801 trabalhar em paralelo com o 68000 principal.

fabim escreveu:agora eu tendeu, ;-)

Ta vendo qua que que que qui que qua ?

o ponteiro aponta para aquele endereço inicial, e a estrutura se encarrega de colocar os bytes nos seus devidos lugares.
Cara vou ser sincero, eu ja tinha visto algo igual em sources de exemplos que eu peguei, até mesmo o nosso amigo colocou algo parecido lá encima.
Eu estava mentalizando algo parecido, só que tudim na unha. Jamais que ia imaginar que o ansi aceita que uma estrutura tambem pode ser um ponteiro.
Tks all.
Assim que eu acabar eu coloco aqui pro pessoal dar uma olhada de como ficou, e dar uns pitecos tambem.

Brigadão a todos, e que a mãe diná os pague, pois eu estou quebrado.

ab´s
Fabim

MensagemEnviado: 11 Nov 2009 22:50
por fabim
CRUIZ CREDO!!HAHAHAHA

O problema é que eu programo em 4 linguagens, até uns meses atraz tinha nojo de C.
Quando o jean me introduiziu ao C, eu conheci um mundo novo e não quero mais largar...rs

o C é extremamente flexivel, até sintaxis de ponteiro indireto baseado em bytes LSB......HMSB, que eu achava que não era possivel que o mikroC entendesse, ele pegou de primeira.
fiz o mesmo no keil, bateu rodou...

Muito legal, o mais poderozo de tudo, é um comandinho #define e o parceiro #pragma, esses caras são uma mão na roda!!

neste momento, estou montando um drive para RTC generico para, 21XX e 23XX, o CM3 que tem uns espaçamentos doidos na região de controle do RTC, mais vai ser facim tambem. ;-)

tkall !!

Fabim