/* * File: fixed01.c * Author: kubalik * * Created on 23. brezna 2019, 19:43 */ #include "p33EV32GM002.h" #pragma config FNOSC = FRC // pracujeme s FRC oscilatorem 7.37MHz #pragma config OSCIOFNC = ON //OSC2 is general purpose digital I/O pin #pragma config IOL1WAY = ON //Allow Only One reconfiguration pro PPS #pragma config FWDTEN = OFF // WDT and SWDTEN Disabled Watchdog vypnut #define CISLO 159 // tohle chci pouzit take v assemblerovske casti // proto je to globalni signed _Fract polefract[20] = { 0,0,0,0,0,0,0}; // normalni pole v RAM // jeho zacatek jsem vynuloval const signed _Fract polePSV[5] = { 0.5, 0.25, 0.125, -0.5, -0.25 } ; // const zajisti, aby se pole ulozilo do EEPROM, pouzivame PSV signed _Fract __attribute__(( space(ymemory) )) jinepole[100] ; // pole jinepole bude ulozeno v Y space memory, potrebujeme to pro MAC prefetches // viz kapitola 2.5.6 navodu pro prekladac void prvni ( void ) ; void druha ( void ) ; int treti ( int a , int b ) ; signed _Fract ctvrta ( signed _Fract a, signed _Fract b ) ; unsigned int pata ( void ) ; unsigned int sesta ( void ) ; _Fract sedma ( _Fract a ) ; _Fract osma ( unsigned int a ) ; signed _Fract a , b ; unsigned _Fract c ; unsigned int celecislo ; const unsigned int konecpole = &jinepole[99] ; void main() { int i ; i++ ; // sem si dejte breakpoint a = 0.25r ; // prvni(); muzete se na to podivat, ale ta prvni je dost slozita b = - 0.987654r ; // suffix r znamena fractional c = 0.56789ur ; // ur je unsigned fractional druha(); i = treti( 58,62 ) ; // nastavujeme DSP engine // viz file DSP_engine.doc, prvni strana CORCONbits.SATA = 1 ; // zapinam aritmetiku se saturaci pro ACC. A CORCONbits.SATB = 1 ; CORCONbits.IF = 0 ; // format cisel fractional CORCONbits.US = 0 ; // operace budou signed CORCONbits.ACCSAT = 0 ; // supersaturace CORCONbits.SATDW = 1 ; // automaticka saturace pri zapisu do registru a = ctvrta( 0.1r , 0.2r ); a = ctvrta ( 0.25r , 0.25r ); a = ctvrta ( 0.99r , 0.8r ) ; a = ctvrta ( -1.0r , -1.0r ) ; a = ctvrta ( -0.8r , -0.7r ) ; i = i ; jinepole[0] = 0.25r ; jinepole[0] = -0.478r ; jinepole[0] = 0.222r ; celecislo = pata() ; celecislo = sesta() ; i++ ; // sem si dejte breakpoint celecislo = 0x4000; a = sedma(celecislo) ; a = osma(celecislo) ; a = celecislo ; i = i ; while(1) { // sem napiseme to, co se v programu dela porad dokolecka i++; } }