Настройка регистров на плате Arduino на базе Samd

c++

Я пытаюсь настроить BOD33 для микроконтроллера Samd51 в файле .ino в первую очередь, даже до строк #include в .ino

// Определяем базовый адрес для t_SUPC
#define T_SUPC_BASE 0x40001800UL

// Определяем смещения для t_BOD33 и t_STATUS
#define T_BOD33_OFFSET 0x10
#define T_STATUS_OFFSET 0x0C

// Устанавливаем регистр t_SUPC
volatile uint32_t *t_SUPC = (volatile uint32_t *)T_SUPC_BASE;

// Устанавливаем регистр t_BOD33
volatile uint32_t *t_BOD33 = (volatile uint32_t *)(T_SUPC_BASE + T_BOD33_OFFSET);

// Устанавливаем регистр t_STATUS
volatile uint32_t *t_STATUS = (volatile uint32_t *)(T_SUPC_BASE + T_STATUS_OFFSET);

// Очистка бита 1 в t_BOD33 и установка его на 1
*t_BOD33 &= ~(1u << 1); // Очистить бит 1

// Проверяем бит 0 в t_STATUS и выполняем цикл, пока он равен 0
while ((*t_STATUS & 0x01) == 0)
{
}

*t_BOD33 &= (0x7D0300u << 1);

*t_BOD33 |= (1u << 1); // Устанавливаем бит 1 в 1
while ((*t_STATUS & 0x01) == 0)
{
}

while ((*t_STATUS & 0x02) != 0)
{
}

// Очистка бита 1 в t_BOD33 и установка его на 1
*t_BOD33 &= ~(1u << 1); // Очистить бит 1
while ((*t_STATUS & 0x01) == 0)
{
}
*t_BOD33 |= (1u << 2);
*t_BOD33 &= ~(1u << 3);
*t_BOD33 |= (1u << 1); // Устанавливаем бит 1 в 1

но у меня возникла проблема с компиляцией, и VScode выдает эту ошибку, и я понятия не имею, почему, поскольку никогда раньше с ней не сталкивался. ошибки:

""

0_2.ino:28:10: error: expected constructor, destructor, or type conversion before '&=' token
   28 | *t_BOD33 &= ~(1u << 1); // Clear bit 1
      |          ^~
0_2.ino:31:1: error: expected unqualified-id before 'while'
   31 | while ((*t_STATUS & 0x01) == 0)
      | ^~~~~
0_2.ino:35:10: error: expected constructor, destructor, or type conversion before '&=' token
   35 | *t_BOD33 &= (0x7D0300u << 1);
      |          ^~
0_2.ino:37:10: error: expected constructor, destructor, or type conversion before '|=' token
   37 | *t_BOD33 |= (1u << 1); // Set bit 1 to 1
      |          ^~
0_2.ino:38:1: error: expected unqualified-id before 'while'
   38 | while ((*t_STATUS & 0x01) == 0)
      | ^~~~~
0_2.ino:42:1: error: expected unqualified-id before 'while'
   42 | while ((*t_STATUS & 0x02) != 0)
      | ^~~~~
0_2.ino:47:10: error: expected constructor, destructor, or type conversion before '&=' token
   47 | *t_BOD33 &= ~(1u << 1); // Clear bit 1
      |          ^~
0_2.ino:48:1: error: expected unqualified-id before 'while'
   48 | while ((*t_STATUS & 0x01) == 0)
      | ^~~~~
0_2.ino:51:10: error: expected constructor, destructor, or type conversion before '|=' token
   51 | *t_BOD33 |= (1u << 2);
      |          ^~
0_2.ino:52:10: error: expected constructor, destructor, or type conversion before '&=' token
   52 | *t_BOD33 &= ~(1u << 3);
      |          ^~
0_2.ino:53:10: error: expected constructor, destructor, or type conversion before '|=' token
   53 | *t_BOD33 |= (1u << 1); // Set bit 1 to 1
      |          ^~

Заранее спасибо.

, 👍2


1 ответ


3

Строка, в которой начинается ошибка, должна вести к функции, например, setup(). Вы можете скомпилировать код ниже.

// Определяем базовый адрес для t_SUPC
#define T_SUPC_BASE 0x40001800UL
// Определяем смещения для t_BOD33 и t_STATUS
#define T_BOD33_OFFSET 0x10
#define T_STATUS_OFFSET 0x0C

// Устанавливаем регистр t_SUPC
volatile uint32_t *t_SUPC = (volatile uint32_t *)T_SUPC_BASE;
// Устанавливаем регистр t_BOD33
volatile uint32_t *t_BOD33 = (volatile uint32_t *)(T_SUPC_BASE + T_BOD33_OFFSET);
// Устанавливаем регистр t_STATUS
volatile uint32_t *t_STATUS = (volatile uint32_t *)(T_SUPC_BASE + T_STATUS_OFFSET);



void setup() 
{
    // Очистка бита 1 в t_BOD33 и установка его на 1
    *t_BOD33 &= ~(1u << 1); // Очистить бит 1

    // Проверяем бит 0 в t_STATUS и выполняем цикл, пока он равен 0
    while ((*t_STATUS & 0x01) == 0)
    {
    }

    *t_BOD33 &= (0x7D0300u << 1);

    *t_BOD33 |= (1u << 1); // Устанавливаем бит 1 в 1
    while ((*t_STATUS & 0x01) == 0)
    {
    }

    while ((*t_STATUS & 0x02) != 0)
    {
    }

    // Очистка бита 1 в t_BOD33 и установка его на 1
    *t_BOD33 &= ~(1u << 1); // Очистить бит 1
    while ((*t_STATUS & 0x01) == 0)
    {
    }
    *t_BOD33 |= (1u << 2);
    *t_BOD33 &= ~(1u << 3);
    *t_BOD33 |= (1u << 1); // Устанавливаем бит 1 в 1
}
,