⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 关于软中断和semihosting的一个程序,根据ADS1.2源代码修改,希望能对大家有帮助
💻 C
字号:
/*
 * Copyright (C) ARM Limited, 1998. All rights reserved.
 */

#include <stdio.h>
#include "swi.h"


#define	GPBCON				(*(volatile unsigned long *)0x56000010)
#define	GPBDAT				(*(volatile unsigned long *)0x56000014)
#define	GPB6_out	(1<<(6*2))  //GPB6
#define	GPB5_out	(1<<(5*2))  //GPB5

unsigned *swi_vec = (unsigned *)0x08;

extern void swi_handler(void);


void ledon_left (void);
void ledon_right (void);

unsigned Install_Handler( unsigned routine, unsigned *vector )
{
    unsigned vec, old_vec;

    vec = (routine - (unsigned)vector - 8) >> 2;
    if (vec & 0xff000000)
    {
        printf("Handler greater than 32MBytes from vector");
//    	exit (1);
    }
    vec = 0xea000000 | vec;     

    old_vec = *vector;
    *vector = vec;
    return (old_vec);
}

#pragma import(__use_two_region_memory)

struct __initial_stackheap {
    unsigned heap_base;                /* low-address end of initial heap */
    unsigned stack_base;               /* high-address end of initial stack */
    unsigned heap_limit;               /* high-address end of initial heap */
    unsigned stack_limit;              /* low-address end of initial stack */
};

__value_in_regs struct __initial_stackheap
 __user_initial_stackheap(unsigned R0, unsigned SP, unsigned R2, unsigned SL) 	 
{ 		 
	struct __initial_stackheap config;
	
	config.heap_base =0x32019000;//0x32018730;//0x32018b00; (unsigned int) &Image$$ER_RW$$Limit;
	config.heap_limit = 0x33ff4700;
	config.stack_base =0x33ff5800;//SP;// //0x33f00000;//
	config.stack_limit =0x33ff4800;//0x33d00000; //
    
	return config; 		 
}


int main( void )
{

	int result1, result2,t;
    struct four_results res_3;

   Install_Handler( (unsigned) swi_handler, swi_vec );
	ledon_left();

    result1 =  multiply_two(2, 4);
    
    ledon_right();

 
	while (1)
	{
	ledon_right();
	ledon_left();
	}
}


void ledon_left(void)
{
     int j,i;
	GPBCON	 = GPBCON | GPB6_out;
	for(j=0;j<6;j++)
	  {
		for(i=0;i<20000;i++);
		GPBDAT = 0x7BE;// GPBDAT | GPB6_on;	
		for(i=0;i<20000;i++);
		GPBDAT = 0x7FF;// GPBDAT | GPB6_off;					
	   }
	   
	return;
}

void ledon_right(void)
{
     int j,i;
	GPBCON	 = GPBCON | GPB5_out;
	for(j=0;j<6;j++)
	  {
		for(i=0;i<20000;i++);
		GPBDAT = 0x7DE;// GPBDAT | GPB5_on;	
		for(i=0;i<20000;i++);
		GPBDAT = 0x7FF;// GPBDAT | GPB5_off;					
	   }
	   
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -