Narzędzia użytkownika

Narzędzia witryny


studia:magisterskie:1sem:mikroprocesory

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronach Poprzednia wersja
studia:magisterskie:1sem:mikroprocesory [2016/04/26 19:23]
149.156.112.6
studia:magisterskie:1sem:mikroprocesory [2016/05/31 19:15] (aktualna)
149.156.112.6
Linia 259: Linia 259:
 ===== Zajęcia 8 ===== ===== Zajęcia 8 =====
 {{:​studia:​magisterskie:​1sem:​wogus.zip|}} {{:​studia:​magisterskie:​1sem:​wogus.zip|}}
 +===== Zajęcia n-1 =====
 +<code c>
 +#include <​stdio.h>​
 +//#include <​stdlib.h>​
 +#include "​stm32f4xx.h"​
 +#include "​GLCD.h"​
 +
 +
 +#define __FI       1
 +#if (__FI == 1)                        ​
 +  #define __FONT_WIDTH ​ 16
 +  #define __FONT_HEIGHT 24
 +#else           
 +  #define __FONT_WIDTH ​  6
 +  #define __FONT_HEIGHT ​ 8
 +#endif
 +
 +uint32_t rand_lfsr32(void);​
 +uint32_t rand_hw(void);​
 +void clock_config(void);​
 +
 +uint32_t i,​x;​
 +char s[20];​
 +
 +int main()
 +{
 +
 + clock_config();​
 +
 + RCC->​AHB2ENR |= 1<<6; //wlacz zegar DRNG
 + RNG->CR |= 1<<​2;​ //​wlacz DRNG
 +
 + GLCD_Initialize(); ​
 + GLCD_SetBackColor(Black);​
 +  GLCD_SetTextColor(White);​
 + GLCD_Clear(Black);​
 +
 + x=0xabcdef12;​
 +
 + for (i=0;​i<​10;​i++) {
 +
 + x=rand_lfsr32();​
 + //​x=rand_hw();​
 +
 + sprintf(s,"​%x",​ x);
 + GLCD_DisplayString(i,​ 0, __FI,s);
 + }
 +
 + while (1);
 +
 +
 +
 +void clock_config(void)
 +{
 + //​wspolpraca z pamiecia FLASH
 + FLASH->​ACR |= 5; //5 WaitStatow dla 180MHz
 + FLASH->​ACR |= ((1<<​8) | (1<<​9) | (1<<​10));​ //wlacz prefetch oraz I&D cache
 +
 + //wybor oscylatora
 + RCC->CR &= ~(1<<​0);​ //HSI OFF
 + RCC->CR |=  (1<<​16);​ //HSE ON
 + while (!(RCC->​CR & 1<<​17));​ //czekaj az sie HSE ustabilizuje
 +
 + //​konfiguracja PLL: fout = (fin/​M)*(N/​P)
 + RCC->​PLLCFGR &= 0xF0BC0000; //zostaw tylko bity reserved, reszta 0
 + RCC->​PLLCFGR |= 4;//8; //M (2-63)
 + RCC->​PLLCFGR |= 360<<​6;//​192<<​6;​ //​N (192-432)
 + RCC->​PLLCFGR |= 1<<​16;​ //P 0=/2 1=/4 2=/6 3=/8
 + RCC->​PLLCFGR |= 15<<​25;​ //​2<<​24;​ //Q (2-15) USB SDIO random number generator
 + RCC->​PLLCFGR |= 1<<​22;​ //wejscie PLL 1=HSE, 0=HSI
 +
 + RCC->CR |= 1<<​24;​ // 1 - PLL ON, 0 - PLL OFF
 + while (!(RCC->​CR & 1<<​25));​ //czekaj az PLL sie zatrzasnie
 +
 + RCC->​CFGR |= 2;  //0 - HSI, 1 - HSE, 2 - PLL jako SYSCLK
 + RCC->​CFGR |= 0<<​4;​ //​AHB PRESCALER 8 - /2, 9 - /4 ,10 - /8 ...
 + RCC->​CFGR |= 7<<​10;​ //​APB1 PRESCALER LOW SPEED 4 - /2, 5- /4, 6 - /8, 7 - /16 
 + RCC->​CFGR |= 0<<​13;​ //​APB2 PRESCALER HI SPEED
 +}
 +
 +
 +//uzupelnic LFSR-32bit
 +//​wielomian:​ x^32+x^30+x^26+x^25
 +__asm uint32_t rand_lfsr32(void)
 +{
 + LDR R3,​=__cpp(&​x)
 + LDR R0,[R3]
 + ROR R0,R0,#1
 + ASR R1,R0,#31
 + AND R1,R1, #0x23000000
 + EOR R0,R0,R1
 + bx lr
 +}
 +
 +//uzupelnic - generator sprzetowy
 +__asm uint32_t rand_hw(void)
 +{
 + LDR R1,​=0x50060800
 +rand_loop
 + LDR R0,[R1,#4]
 + ANDS R0, #1
 + BEQ rand_loop
 +
 + LDR R0,[R1,#8]
 + bx lr
 +}
 +
 +</​code>​
studia/magisterskie/1sem/mikroprocesory.1461691402.txt.gz · ostatnio zmienione: 2016/04/26 19:23 przez 149.156.112.6