Mcucpp

Форк
0
150 строк · 2.9 Кб
1

2
//volatile uint32_t status = 0xffffffff;
3

4
#include <clock.h>
5
#include <iopins.h>
6
#include <power.h>
7
#include <dma.h>
8
#include <usart.h>
9
//#include <adc.h>
10
#include <delay.h>
11
#include <hw_random.h>
12
#include <sys_tick.h>
13

14
#include <tiny_ostream.h>
15
#include <tiny_iomanip.h>
16

17

18
using namespace Mcucpp;
19
using namespace Mcucpp::IO;
20
using namespace Mcucpp::Clock;
21

22

23
typedef Pd13 Led1;
24
typedef Pd12 Led2;
25
typedef Pd14 Led3;
26
typedef Pd15 Led4;
27

28
struct UsartOut
29
{
30
	void put(char c)
31
	{
32
		if(c == '\n')
33
			Usart1::Write('\r');
34
		Usart1::Write(c);
35
	}
36
};
37

38
struct SwoOut
39
{
40
	void put(char c)
41
	{
42
		if(c == '\n')
43
			ITM_SendChar('\r');
44
		ITM_SendChar(c);
45
	}
46
};
47

48
typedef basic_ostream<SwoOut> ostream;
49

50
ostream cout;
51

52
void Hello(void *data, size_t size)
53
{
54
	Led2::Toggle();
55
	//Usart1::SetTxCompleteCallback(Hello);
56
	Usart1::Write(data, size, true);
57
}
58

59

60
void AdcFunc(uint16_t *data, size_t size)
61
{
62
	cout << "Data: " << size << " ";
63
	for(int i = 0; i < size; i++)
64
		cout << setw(6) << data[i];
65
	cout << "\n";
66
}
67

68
uint8_t buffer[16];
69
uint16_t adcbuffer[16];
70

71
#define cycle 1000000L
72
//#define TT double
73
#define TT float
74

75
	TT test(void)
76
	{
77
		TT a = (TT)1.0;
78
		TT b = (TT)1234.567;
79

80
		for (long i = 0; i < cycle; i++)
81
		{
82
			a = a + ( (TT)i / b );
83
			b = b + (TT)0.000001;
84
			if (a > (TT)100000000.0) 
85
				a = (TT)1.0;
86
		}
87
		return(a);
88
	}
89

90

91
int main()
92
{
93
	SysClock::SetClockFreq(168000000);
94
	Portd::Enable();
95
	Porta::Enable();
96
	Portb::Enable();
97
	Portc::Enable();
98
	
99
	Led1::SetConfiguration(NativePortBase::Out);
100
	Led2::SetConfiguration(NativePortBase::Out);
101
	
102
	Usart1::Init(115200);
103
	Usart1::SelectTxRxPins(1, 1);
104
	Usart1::EnableInterrupt(Usart1::RxNotEmptyInt);
105
	cout << "Hello, World!!\nSys Freq = " << SysClock::ClockFreq() << "\n";
106
	cout << "Usart1 Freq = " << Usart1Clock::ClockFreq() << "\n";
107
	cout << "SysTick->CALIB = " << hex << SysTick->CALIB << "\n";
108
	//Adc1::Init();
109
	
110
	//Usart1::SetTxCompleteCallback(Hello);
111
	//Usart1::Write("Hello world!!!\r\n", 16, true);
112
	
113
	Led1::Set();
114
	//delay_ms<5000, 168000000>();
115
			
116
	uint16_t data[32] = {0};
117
	uint8_t ch[16] = {6,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
118
	
119
	//SysTickTimer::Init(10);
120
	//SysTickTimer::EnableInterrupt();
121
	uint32_t start = DWT->CYCCNT;
122
	TT v = test();
123
	uint32_t time = DWT->CYCCNT - start;
124
	cout << "V = " << (float)v << " time = " << dec << time;
125
	
126
	while(1)
127
	{
128
		//Adc1::Start(ch, 1, data, 16, AdcFunc);
129
		
130
		//for(int i = 0; i<16; i++)
131
		//	cout << setw(6) << data[i];
132
		//cout << "Temp = " << Adc1::Read(Adc1::TempSensorChannel) << "\n";
133
		//cout << "\n";
134
		Led1::Toggle();
135
		delay_ms<100, 168000000>();
136
	}
137
}
138

139
extern "C" void USART1_IRQHandler()
140
{
141
	if(Usart1::ReadReady())
142
	{
143
		//Usart1::Write(Usart1::Read()+1);
144
	}
145
	Usart1::ClearInterruptFlag(Usart1::RxNotEmptyInt);
146
}
147

148
extern "C" void SysTick_Handler()
149
{
150
	//Usart1::Write('.');
151
}
152

153

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.