Página 1 de 1
Brincadeira de adulto F877A

Enviado:
14 Mar 2007 20:44
por Vonnilmam
Ilustres colegas,
Eu estou ou melhor já fiz uma rotina em assembler que envia dados pela serial (só envia não recebe), estou tentando criar uma solução para o seguinte impasse:
Imagine que eu so tenho uma serial por onde deve trafegar todas as informações (não posso utilizar outra serial, tem que passar tudo por essa serial atual),
O Mcu esta enviando uma sequencia de informações (um Frame com 11 informações, referentes a um protocolo), essas informações não podem ser interronpidas até que sejam finalizados os 11 bytes.
Porem foi requisitada uma interrupção no MCU que pede para ele enviar um outro FRAME com 3 bytes imediatamente par a mesma serial....
Como voces resolveriam esse impasse?
Um abraço a todos,
Marcos vonnilmam

Enviado:
14 Mar 2007 23:12
por zielpunkt
O problema é vc não perder algum evento muito breve que gera essa interrupção e que pode ocorrer enquanto vc está enviando o seu protocolo? Então vc teria duas prioridades: não perder determinado evento e também não perder a sua transmissão em andamento? Acho que se for esse o caso, vc poderia priorizar a interrupção sem perder a transmissão dos 11bytes:
- colocar os 11bytes à transmitir num bufferX;
- setar flag de tx para 11bytes;
- iniciar a tx dos 11bytes;
- terminou, clear no flag de tx para 11bytes;
se houver interrupção:
- tratar a interrupção e enviar os 3bytes;
- volta e verifica se flag de tx é set ou clear;
- se set, retransmitir os dados a partir do bufferX;
Não sei se falei bobagem, mas não consegui pensar em nada mais inteligente que isso. Aliás, ainda tô na empresa, ainda não jantei...e tô com muita fome.
Abço.

Enviado:
15 Mar 2007 10:37
por Fábio Pereira
Que tal um buffer circular ?
Até +

Enviado:
15 Mar 2007 11:18
por proex
Que tal vc dar prioridades para cada tipo de requisiçao de interrupçao?
Afinal, isso ai é um PIC, nao é Pentium nao. hehhehehhe
Nao da pra fazer milagres.
Essa idéia de interromper a serial no meio da transmissao para enviar mais coisas pela propria serial, vai dar bode.
Re: Brincadeira de adulto F877A

Enviado:
15 Mar 2007 16:45
por andre_luis
Voce deve organizar seu programa de maneira a encadear as tarefas, de modo que uma tarefa só poderá ser executada se a tarefa precedente tiver sido concluída.
Sobre a interrupção, voce - ao invez de enviar o frame seguinte - pode setar um flag, que vai habilitar a execução desta tarefa ( após a anterior ter sido concluída ).
Isso é um procedimento usual em manipulação de protocolos.
+++

Enviado:
20 Mar 2007 20:02
por Vonnilmam
Olá a todos os amigos do forum...
As ideias são muito boas,
Todas são interessantes e o problema foi resolvido da seguinte forma;
Conforme o andre_teprom e o fabio mensionaram o melhor é utilizar um unico buffer com o comprimento total de todos os eventos que ocorrerão, ou seja os 11 bytes + os 3bytes que são prioritarios...
A solução é então criar um buffer com 14 bytes e através de flags indicar a esse driver contendo os 14 bytes quais devem ser enviados, esse driver fica na interrupção ou então fica no proprio loop do programa, se o programa for muito extenço deve ser melhor deixar numa interrupção disparada pelo TMR0 por ex...
Vou postar essa rotina aquí, acredito que irá ajudar muitos iniciantes e até mesmo veteranos....
Estou aprendendo agora a mexer com o blakfim proex, o que voce acha do kit com o DSP 533...estou prestes a compra-lo...
valeu,
Abraço a todos,
Marcos vonnilmam

Enviado:
20 Mar 2007 21:33
por proex
Blackfin? pô, até que enfim heim Vonnnilmam.
Agora vai ehehehheheh.
Excelente processador, nao ha o que reclamar. Ainda mais agora que a AD finalmente resolveu colocar a memoria de programa dentro do chip.

Enviado:
23 Mar 2007 13:26
por Vonnilmam
Proex...
Posso contar com sua ajuda?
Nos blakfin...
Grato,
Marcos vonnilmam