Здравствуйте, возникли вопросы по работе с вашим процессором и библиотеке.
1. Мне необходимо реализовать проект в котором:
 6 каналов UART ведут прием пакетов (16 байтных) на скорости 115200 и (возможно по DMA) раскладывают принятые пакеты по 
    буферам. Каналы равноприоритетные. Я пока не определился хватит ли производительности с прерываниями по заполнению 
    FIFO или надо, все таки, использовать прерывания от DMA
 1 прерывание от ноги GPIO
 1 МПКД в режиме ОУ
Хотелось бы "рыбу" проекта (желательно под gcc eclipse).
2. Некоторые замечания по биоблиотеке
 и для IAR и для GCC в библиотеке есть несколько ошибок:
файл i2c.c 
Код:
CTRL_T I2C_GetCtrlNum(I2C_T *pI2C)
{
    CTRL_T CtrlI2C = I2C_CTRL_NUM;
    return CtrlI2C;
}
неиспользуемый параметр pI2C и переменная CtrlI2C : функция в любом случае возвращает I2C_CTRL_NUM
файл mkpd.c 
Код:
void MKPD_Set_System_Clock(MKPD_T *pMKPD, uint32_t sys_clk)
{
    pMKPD->SETTING0 = (pMKPD->SETTING0 & ~(0xFF << 24)) | MKPD_SETTING0_SYS_CLK(sys_clk-1);
}
из-за того, что в define макроса MKPD_SETTING0_SYS_CLK параметр x не экранирован скобками, то результат будет неправильным
Код:
#define MKPD_SETTING0_SYS_CLK(x)        ((uint32_t)((x & 0xFF) << 24))          /**< системная частота в МГц */
а должно быть
Код:
#define MKPD_SETTING0_SYS_CLK(x)        ((uint32_t)(((x) & 0xFF) << 24))          /**< системная частота в МГц */
вообще такая ошибка (с не экранированием скобками параметра макроса) присутствует в многих макросах
файл fpu.c
в нем часто встречается конструкция
Код:
    if (-1<A<1)
может IAR это и одобряет, но видимо должно быть
Код:
    if ((A > -1) && (A < 1))
Код:
float FPU_tg(float A)
{
    if (-1<A<1)
    {
        float T = FPU_pow3(A);                                                   ///< A^3            
        float X = FPU_ADD(A,3);                                                 ///< A + A^3/3     
        float Y = FPU_MUL(FPU_MUL(FPU_pow3(A),A),A);             ///< A^5            
        float res = FPU_ADD(X,2*Y/15);                                      ///< A + A^3/3 +  2*A^5/15
        return res;
если верить коментариям, то правильно
Код:
float FPU_tg(float A)
{
    if ((A > -1) && (A < 1))
    {
        float T = FPU_pow3(A);                                                  ///< A^3            
        float X = FPU_ADD(A,(float)T/3);                                    ///< A + A^3/3
        float Y = FPU_MUL(FPU_MUL(T,A),A);                              ///< A^5
        float res = FPU_ADD(X,2*Y/15);                                     ///< A + A^3/3 +  2*A^5/15
        return res;
аналогично в других функциях
Код:
float FPU_atg(float A)
{
    if (-1<A<1)
    {
        float T = FPU_pow3(A);                                                  ///< A^3            
        float X = FPU_SUB(A,3);                                                 ///< A - A^3/3     
        float Y = FPU_MUL(FPU_MUL(FPU_pow3(A),A),A);                            ///< A^5            
        float res = FPU_ADD(X,2*Y/15);                                          ///< A - A^3/3 +  2*A^5/15
        return res;
float FPU_atg(float A)
{
    if ((A > -1) && (A < 1))
    {
        float T = FPU_pow3(A);                                                  ///< A^3            
        float X = FPU_SUB(A,(float)T/3);                                        ///< A - A^3/3
        float Y = FPU_MUL(FPU_MUL(T,A),A);                                      ///< A^5
        float res = FPU_ADD(X,2*Y/15);                                          ///< A - A^3/3 +  2*A^5/15
        return res;
В таблице векторов gcc прописаны не все вектора
и вообще файл vector_DEVICE.c для gcc лучше оформить в виде
Код:
// ----------------------------------------------------------------------------
#include "cortexm/ExceptionHandlers.h"
// ----------------------------------------------------------------------------
void Default_Handler(void);
// Forward declaration of the specific IRQ handlers. These are aliased
// to the Default_Handler, which is a 'forever' loop. When the application
// defines a handler (with the same name), this will automatically take
// precedence over these weak definitions
//
void Timer_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Watchdog_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void UART_1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void UART_2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void UART_3_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void UART_4_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void SPI_1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void SPI_2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_A_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_B_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_C_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_D_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_E_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_F_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_G_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void GPIO_H_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Spacewire1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Spacewire2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void CAN1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void CAN2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Manchester1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Manchester2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Manchester3_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void Manchester4_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void DMA_DONE_SPI_1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void DMA_DONE_SPI_2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void DMA_DONE_UART_1_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void DMA_DONE_UART_2_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void DMA_DONE_UART_3_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
void DMA_DONE_UART_4_IRQ(void)__attribute__ ((weak, alias("Default_Handler")));
// ----------------------------------------------------------------------------
extern unsigned int _estack;
typedef void
(* const pHandler)(void);
// ----------------------------------------------------------------------------
// The vector table.
// This relies on the linker script to place at correct location in memory.
__attribute__ ((section(".isr_vector"),used))
pHandler __isr_vectors[] =
  { //
    (pHandler) &_estack,                          // The initial stack pointer
        Reset_Handler,                            // The reset handler
        NMI_Handler,                              // The NMI handler
        HardFault_Handler,                        // The hard fault handler
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
        MemManage_Handler,                        // The MPU fault handler
        BusFault_Handler,// The bus fault handler
        UsageFault_Handler,// The usage fault handler
#else
        0, 0, 0,              // Reserved
#endif
        0,                                        // Reserved
        0,                                        // Reserved
        0,                                        // Reserved
        0,                                        // Reserved
        SVC_Handler,                              // SVCall handler
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
        DebugMon_Handler,                         // Debug monitor handler
#else
        0,                 // Reserved
#endif
        0,                                        // Reserved
        PendSV_Handler,                           // The PendSV handler
        SysTick_Handler,                          // The SysTick handler
        // ----------------------------------------------------------------------
        // DEVICE vectors
   Timer_IRQ,                  // Device specific
   Watchdog_IRQ,
   UART_1_IRQ,
   UART_2_IRQ,
   UART_3_IRQ,
   UART_4_IRQ,
   SPI_1_IRQ,
   SPI_2_IRQ,
   GPIO_A_IRQ,
   GPIO_B_IRQ,
        GPIO_C_IRQ,
   GPIO_D_IRQ,
   GPIO_E_IRQ,
   GPIO_F_IRQ,
   GPIO_G_IRQ,
   GPIO_H_IRQ,
   Spacewire1_IRQ,
   Spacewire2_IRQ,
        CAN1_IRQ,
   CAN2_IRQ,
        Manchester1_IRQ,
   Manchester2_IRQ,
   Manchester3_IRQ,
   Manchester4_IRQ,
   0,
   0,
   DMA_DONE_SPI_1_IRQ,
   DMA_DONE_SPI_2_IRQ,
   DMA_DONE_UART_1_IRQ,
   DMA_DONE_UART_2_IRQ,
   DMA_DONE_UART_3_IRQ,
   DMA_DONE_UART_4_IRQ,
    };
// ----------------------------------------------------------------------------
// Processor ends up here if an unexpected interrupt occurs or a specific
// handler is not present in the application code.
void __attribute__ ((section(".after_vectors")))
Default_Handler(void)
{
  while (1)
    {
    }
}
// ----------------------------------------------------------------------------
хотя я и не понимаю где должны быть обработчики UART5, UART6 и соответствующие DMA