Встроенные процедуры
Компилятор mikroPascal PRO для ARM содержит набор полезных встроенных служебных функций. Встроенные функции не имеют особых требований к использованию. Вы можете использовать их в любой части вашего проекта.
Процедуры Delay_us
и Delay_ms
реализуются по типу “inline”, то есть код генерируется на месте вызова, поэтому вызов не противоречит требованиям nested call limit.
Процедуры Vdelay_ms
, Vdelay_advanced_ms
, Delay_Cyc
, Get_Fosc_kHz
и Get_Fosc_Per_Cyc
- действительные процедуры языка Pascal. Их исходные тексты можно найти в __Lib_Delays.mpas
файле, расположенном в папке uses компилятора.
- EnableInterrupts
- DisableInterrupts
- RestoreInterrupts
- NVIC_IntDisable
- NVIC_IntEnable
- NVIC_SetIntPriority
Lo
Прототип |
function Lo(Argument: byte..real): byte; |
---|---|
Описание |
Функция возвращает младший байт аргумента. Функция не интерпретирует битовые шаблоны аргумента - она просто возвращает 8 бит, найденных в регистре. Это «встроенная» процедура, код генерируется вместо вызова, поэтому вызов не учитывает ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Самые младшие 8 бит (байт) |
Требует |
Аргументы должны быть переменными скалярного типа (т. е. Арифметических типов и указателей). |
Пример |
d := 0x12345678; tmp := Lo(d); // Equals 0x78 Lo(d) := 0xAA; // d equals 0x123456AA |
Примечания |
Нет. |
Hi
Прототип |
function Hi(Argument: word..real): byte; |
---|---|
Описание |
Функция возвращает следующий за младшим байт аргумента Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречитограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Возвращает следующий за младшим байт аргумента |
Требует |
Аргументы должны быть переменными скалярного типа (т. Е. Арифметических типов и указателей). |
Пример |
d := 0x12345678; tmp := Hi(d); // Equals 0x56 Hi(d) := 0xAA; // d equals 0x1234AA78 |
Примечания |
Нет. |
Higher
Прототип |
function Higher(Argument : dword..real) : byte; |
---|---|
Описание |
Функция возвращает следующий за старшим байт арумента Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречит ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Возвращает следующий за старшим бай аргумента |
Требует |
Аргументы должны быть переменными скалярного типа (т. е. Арифметических типов и указателей). |
Пример |
d := 0x12345678; tmp := Higher(d); // Equals 0x34 Higher(d) := 0xAA; // d equals 0x12AA5678 |
Примечания |
Нет. |
Highest
Прототип |
function Highest(Argument : dword..real) : byte; |
---|---|
Описание |
Функция возвращает самый старший байт Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречит ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Возвращает самый старший байт аргумента |
Требует |
Аргументы должны быть переменными скалярного типа (т. Е. Арифметических типов и указателей). |
Пример |
d := 0x12345678; tmp := Highest(d); // Equals 0x12 Highest(d) := 0xAA; // d equals 0xAA345678 |
Примечания |
Нет. |
LoWord
Прототип |
function LoWord(Argument : word..real) : word; |
---|---|
Описание |
Функция возвращает младшее слово аргумента |
Параметры |
|
Возвращает |
Младшее слово аргумента |
Требует |
Ничего. |
Пример |
d := 0x12345678; tmp := LoWord(d); // Equals 0x5678 LoWord(d) := 0xAAAA; // d equals 0x1234AAAA |
Примечания |
Нет. |
HiWord
Прототип |
function HiWord(Argument : dword..real) : word; |
---|---|
Описание |
Функция возвращает старшее слово аргумента |
Параметры |
|
Возвращает |
Старшее слово аргумента |
Требует |
Ничего. |
Пример |
d := 0x12345678; tmp := HiWord(d); // Equals 0x1234 HiWord(d) := 0xAAAA; // d equals 0xAAAA5678 |
Примечания |
Нет. |
HigherWord
Прототип |
function HigherWord(Argument : uint64..extended) : word; |
---|---|
Описание |
Функция возвращает высшее слово аргумента |
Параметры |
|
Возвращает |
Высшее слово аргумента |
Требует |
Ничего. |
Пример |
d := 0x1122334455667788; tmp := HigherWord(d); // Equals 0x33344 HigherWord(d) := 0xAAAA; // d equals 0x1122AAAA55667788 |
Примечания |
Нет. |
HighestWord
Прототип |
function HighestWord(Argument : uint64..extended) : word; |
---|---|
Описание |
Функция возвращает наивысшее слово аргумента |
Параметры |
|
Возвращает |
Наивысшее слово аргумента |
Требует |
Ничего. |
Пример |
d := 0x1122334455667788; tmp := HighestWord(d); // Equals 0x1122 HighestWord(d) := 0xAAAA; // d equals 0xAAAA334455667788 |
Примечания |
Нет. |
LoDword
Прототип |
function LoDword(Argument : dword..extended) : dword; |
---|---|
Описание |
Функция возвращает младшее двойное слово аргумента |
Параметры |
|
Возвращает |
Младшее двойное слово аргумента |
Требует |
Ничего. |
Пример |
d := 0x1122334455667788; tmp := LoDword(d); // Equals 0x55667788 LoDword(d) := 0xAAAAAAAA; // d equals 0x11223344AAAAAAAA |
Примечания |
Нет. |
HiDword
Прототип |
function HiDword(Argument : uint64..extended) : dword; |
---|---|
Описание |
Функция возвращает старшее двойное слово аргумента |
Параметры |
|
Возвращает |
Старшее двойное слово аргумента |
Требует |
Ничего. |
Пример |
d := 0x1122334455667788; tmp := HiDword(d); // Equals 0x11223344 HiDword(d) := 0xAAAAAAAA; // d equals 0xAAAAAAAA55667788 |
Примечания |
Нет. |
Inc
Прототип |
procedure Inc(var par : longint); |
---|---|
Описание |
Увеличивает par параметров на 1. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
p := 4; Inc(p); // p is now 5 |
Примечания |
Нет. |
Dec
Прототип |
procedure Dec(var par : longint); |
---|---|
Описание |
Уменьшает параметр par на 1. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
p := 4; Dec(p); // p is now 3 |
Примечания |
Нет. |
Chr
Прототип |
function Chr(code_ : byte) : char; |
---|---|
Описание |
Функция dозвращает символ, связанный с указанным символьным кодом code_. Номера от 0 до 31 являются стандартными непечатаемыми кодами ASCII. Это «inline» процедура; код создается в месте вызова. |
Параметры |
|
Возвращает |
Возвращает символ, связанный с указанным символьным кодом code_. |
Требует |
Ничего. |
Пример |
c := Chr(10); // Возвращает the linefeed character |
Примечания |
Нет. |
Ord
Прототип |
function Ord(const character : char) : byte; |
---|---|
Описание |
Функция dозвращает ASCII-код символа. Это «inline» процедура; код создается в месте вызова. |
Параметры |
|
Возвращает |
ASCII-код символа. |
Требует |
Ничего. |
Пример |
c := Ord('A'); // Возвращает 65 |
Примечания |
Нет. |
SetBit
Прототип |
procedure SetBit(var register_ : word; rbit : byte); |
---|---|
Описание |
Функция устанавливает бит rbit регистра. Параметр rbit должен быть переменным или литералом со значением 0..15. См. также Предопределенные объекты и константы для получения дополнительной информации о идентификаторах регистров. Это «inline» процедура; код создается в месте вызова. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
SetBit(GPIO_PORTB, 2); // Set GPIO_PORTB.B2 |
Примечания |
Нет. |
ClearBit
Прототип |
procedure ClearBit(var register_ : byte; rbit : byte); |
---|---|
Описание |
Функция очищает бит rbit регистра. Параметр rbit должен быть переменным или литералом со значением 0..15. См. также Предопределенные объекты и константы для получения дополнительной информации о идентификаторах регистров. Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречит ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
ClearBit(GPIO_PORTC, 7); // Clear GPIO_PORTC.7 |
Примечания |
Нет. |
TestBit
Прототип |
function TestBit(register_, rbit : byte) : byte; |
---|---|
Описание |
Функциональные тесты, если бит битбит реестра установлен. Если установлено, функция Возвращает 1, в противном случае возвращает 0. Параметр rbit должен быть переменной или литералом со значением 0..15. См. также Предопределенные объекты и константы для получения дополнительной информации о идентификаторах регистров. Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречит ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Если бит установлен, возвращается 1, иначе возвращает 0. |
Требует |
Ничего. |
Пример |
flag := TestBit(GPIO_PORTE, 2); // 1 if RE2 is set, otherwise 0 |
Примечания |
Нет. |
Delay_us
Прототип |
procedure Delay_us(Time_In_us: dword); |
---|---|
Описание |
Создает задержку программного обеспечения в течение микросекунд Time_In_us. Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречит ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
Delay_us(10); // Ten microseconds pause |
Примечания |
Нет. |
Delay_ms
Прототип |
procedure Delay_ms(Time_In_ms: dword); |
---|---|
Описание |
Создает задержку программного обеспечения в длительности миллисекунд Time_In_ms. Это “inline” процедура; Код создается в месте вызова, поэтому вызов не противоречит ограничениям вложенных вызовов. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
Delay_ms(1000); // One second pause |
Примечания |
Для генерации задержек с переменной в качестве входных параметров используйте функцию Vdelay_ms. |
VDelay_ms
Прототип |
procedure VDelay_ms(Time_ms : word); |
---|---|
Описание |
Создает задержку программного обеспечения в длительности миллисекунд Time_ms. Сгенерированная задержка не такая точная, как задержка, созданная функцией Delay_ms. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
var pause : word; ... VDelay_ms(pause); // ~ one second pause |
Примечания |
Нет. |
VDelay_advanced_ms
Прототип |
procedure VDelay_advanced_ms(time_ms, Current_Fosc_kHz: word); |
---|---|
Описание |
Создает программную задержку в течение времени_in_ms миллисекунды (переменную) для данной частоты генератора. Сгенерированная задержка не такая точная, как задержка, созданная функцией Delay_ms. Обратите внимание, что Vdelay_ms - это функция библиотеки, а не встроенная процедура; он представлен в этом разделе для удобства. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
pause := 1000; fosc := 10000; VDelay_advanced_ms(pause, fosc); // Generates approximately one second pause, for a oscillator frequency of 10 MHz |
Примечания |
Нет. |
Delay_Cyc
Прототип |
procedure Delay_Cyc(cycles_div_by_10 : dword); |
---|---|
Описание |
Создает задержку на основе часов MCU. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
Delay_Cyc(10); // 1 cycles pause |
Примечания |
|
Clock_kHz
Прототип |
function Clock_kHz() : longint; |
---|---|
Описание |
Возвращает часы устройства в кГц, округленные до ближайшего целого. |
Параметры |
Нет. |
Возвращает |
Часы устройства в кГц, округленные до ближайшего целого. |
Требует |
Ничего. |
Пример |
clk := Clock_kHz(); |
Примечания |
Нет. |
Clock_MHz
Прототип |
function Clock_MHz() : word; |
---|---|
Описание |
Возвращает часы устройства в МГц, округленные до ближайшего целого. |
Параметры |
Нет. |
Возвращает |
Часы устройства в МГц, округленные до ближайшего целого. |
Требует |
Ничего. |
Пример |
clk := Clock_MHz(); |
Примечания |
Нет. |
Get_Fosc_kHz
Прототип |
function Get_Fosc_kHz() : longint; |
---|---|
Описание |
Функция возвращает часы устройства в кГц, округленные до ближайшего целого. |
Параметры |
Нет. |
Возвращает |
Часы устройства в кГц. |
Требует |
Ничего. |
Пример |
clk := Get_Fosc_kHz(); |
Примечания |
Get_Fosc_kHz - это библиотечная функция, а не встроенная процедура; он представлен в этом разделе для удобства. |
Get_Fosc_Per_Cyc
Прототип |
function Get_Fosc_Per_Cyc() : word; |
---|---|
Описание |
Функция возвращает часы устройства за цикл, округленные до ближайшего целого. |
Параметры |
Нет. |
Возвращает |
Часы устройства за цикл, округленные до ближайшего целого. |
Требует |
Ничего. |
Пример |
var clk_per_cyc : word; ... clk_per_cyc := Get_Fosc_Per_Cyc(); |
Примечания |
Нет. |
SystemReset
Прототип |
procedure SystemReset(); |
---|---|
Описание |
Эта функция выполняет программный сброс всего устройства. Процессор и все периферийные устройства сбрасываются, и все регистры устройств возвращаются к значениям по умолчанию |
Параметры |
Нет. |
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
SystemReset(); |
Примечания |
Нет. |
DisableContextSaving
Прототип |
procedure DisableContextSaving(); |
---|---|
Описание |
Используйте DisableContextSaving (), чтобы дать команду компилятору не выполнять автоматическую переключение контекста. Это означает, что никакие регистры не будут сохранены / восстановлены компилятором при входе / выходе из процедуры обслуживания прерываний. Это позволяет пользователю вручную записывать код для сохранения регистров при входе и восстанавливать их перед выходом из прерывания. |
Параметры |
Нет. |
Возвращает |
Ничего. |
Требует |
Эта процедура должна вызваться из основного модуля. |
Пример |
DisableContextSaving(); // instruct the compiler not to automatically perform context-switching |
Примечания |
Нет. |
SetFuncCall
Прототип |
procedure SetFuncCall(FuncName: string); |
---|---|
Описание |
Если компоновщик встречает косвенный вызов функции (указателем на функцию), он предполагает, что любая подпрограмма, адрес которой был взят в любом месте программы, может быть вызван в этой точке, если это Прототип соответствует объявлению указателя. Используйте директиву SetFuncCall внутри обычного тела, чтобы проинструктировать компоновщика, какие подпрограммы можно вызвать косвенно из этой процедуры:
Подпрограммы, указанные в списке аргументов SetFunCCall, будут связаны, если подпрограмма, содержащая директиву SetFunCCall, вызывается в коде независимо от того, был ли какой-либо из них явно вызван или нет. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример: |
procedure first(p, q: byte); begin ... SetFuncCall(second); // let linker know that we will call the routine 'second' ... end |
Примечания |
Директива
SetFuncCall может помочь компоновщику оптимизировать распределение фреймов функций в скомпилированном стеке. |
SetOrg
Прототип |
procedure SetOrg(RoutineName: string; address: longint); |
---|---|
Описание |
Use the |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Эта процедура должна вызваться из основного модуля. |
Пример |
SetOrg(UART1_Write, 0x1234); |
Примечания |
Нет. |
GetDateTime
Прототип |
function GetDateTime() : string; |
---|---|
Описание |
Use the |
Параметры |
Нет. |
Возвращает |
Строка с датой и временем, указывающая когда эта подпрограмма была скомпилирована. |
Требует |
Ничего. |
Пример |
str := GetDateTime(); |
Примечания |
Нет. |
DoGetDateTime
Прототип |
function DoGetDateTime() : string; |
---|---|
Описание |
Use the |
Параметры |
Нет. |
Возвращает |
Строка с датой и временем, указывающая когда эта подпрограмма была скомпилирована. |
Требует |
Ничего. |
Пример |
str := DoGetDateTime(); |
Примечания |
Нет. |
GetVersion
Прототип |
function GetVersion() : string; |
---|---|
Описание |
Use the |
Параметры |
Нет. |
Возвращает |
Строка с текущей версией компилятора. |
Требует |
Ничего. |
Пример |
str := GetVersion(); // for Пример, str will take the value of '8.2.1.6'' |
Примечания |
Нет. |
DoGetVersion
Прототип |
function DoGetVersion() : string; |
---|---|
Описание |
Use the |
Параметры |
Нет. |
Возвращает |
Строка с текущей версией компилятора. |
Требует |
Ничего. |
Пример |
str := DoGetVersion(); // for Пример, str will take the value of '8.2.1.6'' |
Примечания |
Нет. |
CPU_REG_GET
Прототип |
function CPU_REG_GET(const reg: TCPUREG): dword; |
---|---|
Описание |
Функция возвращает значение регистра ядра, основываясь на введенном аргументе. |
Параметры |
Параметр должен быть константой из списка встроенных констант, который можно найти в верхней части этой страницы. |
Возвращает |
Значение основного регистра. |
Требует |
Ничего. |
Пример |
var register_value : dword; register_value := CPU_REG_GET(CPU_PRIMASK); |
Примечания |
Нет. |
CPU_REG_SET
Прототип |
procedure CPU_REG_SET(const register: TCPUREG; value: dword); |
---|---|
Описание |
Функция задает значение регистра ядра, основываясь на аргументе регистра. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
CPU_REG_SET(CPU_PRIMASK, 1); |
Примечания |
Нет. |
RestoreInterrupts
Прототип |
procedure RestoreInterrupts(primask : dword); |
---|---|
Описание |
Восстанавливает (включает или отключает) прерывания ядра на основе последнего значения регистра PRIMASK, заданного как рутинный параметр. |
Параметры |
Нет. |
Возвращает |
Возвращает значение, сохраненное в регистре PRIMASK, до того, как прерывания были включены / отключены. |
Требует |
Ничего. |
Пример |
RestoreInterrupts(CPU_PRIMASK); |
Примечания |
Нет. |
EnableInterrupts
Прототип |
function EnableInterrupts() : dword; |
---|---|
Описание |
Эта функция позволяет прерыванию процессора и позволяет процессору реагировать на прерывания. |
Параметры |
Нет. |
Возвращает |
Возвращает значение, сохраненное в регистре PRIMASK. |
Требует |
Ничего. |
Пример |
status_value := EnableInterrupts(); |
Примечания |
Нет. |
DisableInterrupts
Прототип |
function DisableInterrupts() : dword; |
---|---|
Описание |
Эта функция отключает прерывание процессора и предотвращает получение процессором прерываний. |
Параметры |
Возвращает значение, сохраненное в регистре PRIMASK. |
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
status_value := DisableInterrupts(); |
Примечания |
Нет. |
NVIC_IntEnable
Прототип |
procedure NVIC_IntEnable(const ivt: dword); |
---|---|
Описание |
Эта процедура позволяет использовать вектор прерывания. Указанный вектор прерывания включен в контроллере прерываний. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
NVIC_IntEnable(IVT_INT_TIMER0A); |
Примечания |
Список доступных векторов прерываний можно увидеть в Code Assistant, набрав IVT и нажав Ctrl + Space, |
NVIC_IntDisable
Прототип |
procedure NVIC_IntDisable(const ivt: dword); |
---|---|
Описание |
Эта процедура отключает вектор прерывания. Указанный вектор прерывания отключен в контроллере прерываний. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Пример |
NVIC_IntDisable(IVT_INT_TIMER0A); |
Примечания |
Список доступных векторов прерываний можно увидеть в Code Assistant, набрав IVT и нажав Ctrl + Space, |
NVIC_SetIntPriority
Прототип |
procedure NVIC_SetIntPriority(ivt : byte; priority : byte); |
||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Описание |
Эта процедура устанавливает приоритет для данного вектора прерывания. |
||||||||||||||||||||||||||||||||||
Параметры |
|
||||||||||||||||||||||||||||||||||
Возвращает |
Ничего. |
||||||||||||||||||||||||||||||||||
Требует |
Ничего. |
||||||||||||||||||||||||||||||||||
Пример |
NVIC_SetIntPriority(IVT_INT_TIMER0A, _NVIC_INT_PRIORITY_LVL1); |
||||||||||||||||||||||||||||||||||
Примечания |
Список доступных векторов прерываний можно увидеть в Code Assistant, набрав IVT и нажав Ctrl + Space,
|
New
Прототип |
procedure New(var Ptr : pointer); |
---|---|
Описание |
Выделяет блок памяти из кучи памяти, заботясь о выравнивании. Рекомендуется использовать эту процедуру вместо GetMem. |
Параметры |
|
Возвращает |
Возвращает указатель на блок памяти, выделенный функцией; В противном случае 0 (свободные блоки памяти не являются достаточно большими). |
Требует |
Ничего. |
Пример |
|
Примечания |
Нет. |
Dispose
Прототип |
procedure Dispose(var Ptr : pointer); |
---|---|
Описание |
Выделяет блок памяти из кучи памяти, на который ссылается Ptr и возвращает свою память в кучу. |
Параметры |
|
Возвращает | |
Требует |
Ничего. |
Пример |
|
Примечания |
После вызова этой подпрограммы значение Ptr равно nil (0) (не назначен указатель). |
CS_GetClocksFrequency
Прототип |
procedure CS_GetClocksFrequency(CS_Clocks : ^CS_ClocksTypeDef); |
---|---|
Описание |
Эта функция получает частоты для ACLK, HSCLK, MCLK и SMCLK. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Примечания |
Нет. |
CS_RegisterExternalClockFrequency
Прототип |
procedure CS_RegisterExternalClockFrequency(lfxtFrequency : dword; hfxtFrequency : dword); |
---|---|
Описание |
Эта функция устанавливает внешний источник синхронизации. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Ничего. |
Примечания |
|
Core Registers | ||||||
---|---|---|---|---|---|---|
CPU_APSR | CPU_IAPSR | CPU_EAPSR | CPU_XPSR | CPU_IPSR | CPU_EPSR | CPU_IEPSR |
CPU_MSP | CPU_PSP | CPU_PRIMASK | CPU_BASEPRI | CPU_BASEPRI | CPU_BASEPRI_MAX | CPU_CONTROL |