Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. element CPU1() { //sincrono
  2. #sync scale 1000
  3. mode sleep: -5; //consumo de unidades de energia por 1k ciclo de clk
  4. mode active_slow: -50;
  5. mode active_fast: -100;
  6. mode disable: 0;
  7. }
  8.  
  9. element TEMP() { //assincrono
  10. #timescale 1ms
  11. mode enable: -5; // consumo do SPI + sensor. -5 unidades de energia por tempo
  12. mode disable: 0;
  13. }
  14.  
  15. element AD_MIC(){ //assincrono
  16. #timescale 1ms
  17. mode enable: -2; // consumo conversor AD
  18. mode disable: 0;
  19. }
  20.  
  21. element MIC(){ //assincrono
  22. #timescale 1ms
  23. mode enable: -20; // analogico do MIC, a cada 100ns ativo gasta 20 unidades de energia
  24. mode disable: -3; // pre-amp do MIC possui um consumo constante. A cada 100ns gasta 3 unidades de energia
  25. }
  26.  
  27. element BATTERY(){ //assíncrono
  28. #timescale 7s
  29. mode running: -1; //self discharge 1 unidade de energia a cada 7s
  30. mode disable: 0;
  31. }
  32.  
  33. element LED() {
  34. #timescale 100ms
  35. mode enable: -10;
  36. mode disable: 0;
  37. }
  38.  
  39. element RADIO(){
  40. #timescale 1ms
  41. mode tx: -35;
  42. mode rx: -10;
  43. mode disable: 0;
  44. }
  45.  
  46. //define os parametros inicias do modelo
  47. startup {
  48. #timescale 1us //quando nao definido, 1 us é o padrão
  49. $ENERGY = 50000;
  50. ON_AMOST = 0;
  51. MIC.disable();
  52. CPU1.disable();
  53. AD_MIC.disable();
  54. TEMP.disable();
  55. RADIO.rx();
  56. }
  57.  
  58.  
  59. task INIT_ENERGY ( TRUE ) { //sinal de ativacao permanente
  60. 0: BATTERY.running();
  61. }
  62.  
  63. task AMOST_MIC ( TMR(25us) || ON_AMOST_MIC ) {
  64. 0: ON_AMOST_MIC = 1;
  65. 0: AD_MIC.enable()
  66. 0: MIC.enable()
  67. 0: CPU1.active_fast();
  68. $48: ON_AMOST_MIC=0;
  69. $48: MIC.disable()
  70. $48: AD_MIC.disable(); //os perifericos permanecerama ativos pelos 48 ciclos;
  71. $48: CPU1.disable();
  72. }
  73.  
  74. task AMOST_TEMP ( TMR(5s) || ON_AMOST_TEMP ) {
  75. #timescale 1ms;
  76. 0: ON_AMOST_TEMP = 1;
  77. 0: TEMP.enable() //esse sensor so fica pronto depois de 50ms
  78. 50: CPU1.active_slow(); //computacao realizada em 10 ciclos lentos
  79. $10: ON_AMOST_TEMP=0;
  80. $10: CPU1.disable();
  81. }
  82.  
  83.  
  84. task AUDIO_ANALISYS ( TMR(100ms) || ON_AUDIO_AN ) {
  85. #timescale 1ms;
  86. 0: ON_AUDIO_AN = 1;
  87. 0: TEMP.enable(); //esse sensor so fica pronto depois de 50ms
  88. 0: CPU1.active_fast(); //computacao fft realizada em 2400 ciclos
  89. $2400,99.9% { //no ciclo 2400, 99,9% das vezes faz isso
  90. CPU1.disable();
  91. ON_AUDIO_AN = 0;
  92. }
  93. $2400,0.1%: CPU1.active_slow();
  94. $2404: LED_ENABLE = 1;
  95. $2408: SIG_TX_DATA = 1;
  96. $2408: ON_AUDIO_AN = 0;
  97. }
  98.  
  99. task LED( LED_ENABLE ) {
  100. #timescale 1s
  101. 0:LED.enable();
  102. 5:LED.disable();
  103. 5:LED_ENABLE = 0;
  104. }
  105.  
  106. task TX_DATA( SIG_TX_DATA) {
  107. #timescale 1ms
  108. 0: RADIO.tx();
  109. 0: CPU1.active_fast();
  110. $28: CPU1.disable();
  111.  
  112. $28 + 2000 + RANDOM(0,5000) { //radio fica ativo de 28 ciclos+ 2 a 7 segundos
  113. RADIO.disable();
  114. SIG_TX_DATA = 0;
  115. }
  116. }
  117.  
  118. task RX_DATA( INTERRUPT(RX) ) {
  119. 0: CPU1.active_slow();
  120. $30,99.99%: { //30 ciclos para testar os dados
  121. CPU1.disable();
  122. INTERRUPT(RX) = 0;
  123. }
  124. $330: CPU1.disable();
  125. $330: INTERRUPT(RX) = 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement