嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 L8 X' l4 B- U$ i' {* d8 g8 q9 [1 V
Void UPP_TASK(Void)
t7 F5 W1 u0 t( d
{
1 S, t2 i: P5 K6 e% D( G
+ c/ f; @! K$ v( N# g& }0 n
int i,j,k,target_int_count=2;
C; S; B; X+ r& N0 ^7 `
char ch[2];
! H$ r; ]( R A& o) \& H( ?1 z8 Q
; j/ f; {$ Z0 @" ^" s) r b
- ~' r6 ]" W, C
9 V0 E8 {8 X }' o' c; N
upp_interrupt_count = 0;
& I! ^9 x/ L& z8 ^; `+ y# p6 L
upp_error_count = 0;
. n, V- J2 i+ r- [; ]
0 m, C2 `. v* d. f3 [6 S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. L) s& w I/ \* z) Y: ?. U
// Initialize data buffers
' b K2 `3 T; d9 x& g
for (i = 0; i < upp_frame_size; i++)
" O& T: k- H- e4 l# J# Q
{
. b; K" p6 U/ v4 i# i' S
upp_buffer_b
=i;
2 b& j2 f8 _- i
upp_buffer_a
= 0xDEAD;
* I Y) ^$ z K2 Z! ~ q0 k2 T
}
7 R4 ?' ]! W4 C4 j
6 ]2 z9 [- a5 r4 D
//for(i=0;i<1024;i++)
/ E+ P; C( w0 |# Y. k P- \
// temp
=0;
4 ^! ]- Q; l6 z9 M4 P, u `+ J
) e% B L& ~. ~$ }
//UPPReset();
! m% `3 ~' K `
/*启动UPP DMA传输*/
# P9 l3 H7 o, A7 @
UARTPuts("upp_prog_dma_i\n",-2);
1 E2 q3 M$ Y0 P! E- d/ A; Y! x6 O
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' h% L) y/ [ t' G% j. Y L% |
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ U7 Z& R, R3 ~6 C R" c- {
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 {: Q2 z, x0 x" O: Y# M
1 c( h, H# |6 c; }6 n) o
UARTPuts("upp_prog_dma_i\n",-2);
( n0 y3 y- p! t6 Z; J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ b+ [( v; z5 R; [0 Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. s! O0 F D/ W* c+ C7 ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Z) Z9 N. W9 H; K* K+ ^% F" Q) t5 }
# }- f- J1 f2 Q# v! x
/*等待UPP传输完毕*/
8 i5 y. ^& c% {0 i- R g" h
//i=0;
8 A! G) L" d4 [( `5 a% B K
//j=0;
( A0 A" L8 ]. m/ s8 R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 {* j- @" |$ o! S- w- `
{
7 K7 t9 ?& p w* g9 H9 _
/* 测试UPP传输的同时操作普通DDR数据
+ k5 ~1 r2 {' A6 Y" H9 I! J, L+ W/ K
temp
=i;
# G* R" d. a, W( Y1 Z; ?% Q* l
i++;
9 B1 @; y% x) Q/ g$ W# Z) a# \
if(i==1024)
- x2 q' q& z: D7 a8 P4 U4 |
{
: j" {* j& O% g) I
i=0;
( c# t5 I* w7 N! \* c$ Z B: u+ l
j++;
3 I% k% ^ W6 n# @9 b
}
) O6 K# ] ~8 C
*/
( x. F$ O4 N( j6 w
& ~. Y) _1 K* z' ~6 Q5 d* p
asm(" nop");
* D" r& G# q1 t7 k3 x) u/ \% G
, J# F" R4 J) L( I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) ]% L% Q. x" \7 ]' L6 B; x
}
' }2 G7 f6 a1 w) P T
8 A/ e0 h. F2 c" v3 ?1 T( c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 x" R. d8 y, R2 {' y, j
//UARTprintf( "i=%d\n",i);
9 S$ G8 U! B( P. ?5 T* h
//UARTprintf( "j=%d\n",j);
: m4 ] f8 j3 X. f; f! I1 L( V
UARTPuts("Data mismatch in buffers.\n",-2);
5 f" Y! a' v5 O8 j
if (upp_interrupt_count == 2 && upp_error_count == 0)
! m9 G* R: i }# o6 x4 a% I9 ^$ `, w
{
5 m8 \( Y J" |& s8 Q" [
for (i = 0; i<upp_frame_size; i++)
, H- Z% n+ `; Q6 k5 {- H1 x$ V5 {, d4 W
{
1 c- Y3 O# U0 u5 u3 u
if (upp_buffer_a
!= upp_buffer_b
)
9 Y; j3 v6 m6 u' s
{
* D# G+ M4 j4 {' E& u) [
upp_error_count++;
( Y1 V* k3 ?4 [7 X: j! F, s/ K( l
}
1 { J R# p" P4 `- K7 O. i; Y
}
* ?3 x0 T% Q& {5 \. l2 M* _
}
" E V& l- Z9 R* }6 W
! \- e- V/ j( h' |9 p+ d
/* 报告通信结果*/
( R/ B1 g% y' B! T7 E. }
if(upp_error_count != 0)
3 A3 U5 m2 R3 m9 Z3 I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: y O# o5 Y% W) }. n+ M2 S
else
6 l8 P; v$ O& z- x# Q* K
UARTPuts("uPP transfers complete!\n",-2);
5 t, I- Q' R- Z2 I3 ?- A) f2 z; {6 G
7 U; V N2 w6 O" h! y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 X9 z1 b9 j* p6 x/ R4 B1 y7 K, ^0 E
UARTGets(ch,2);
& Q- ~( v/ J' [1 M3 i, Q5 R
UARTPuts("\n", -2);
& ~# C( @3 }+ x/ ~/ @" _
9 X4 S( U& Z6 k; ?; T: @) z
if(ch[0] == 'y')
! ?! J( n! ~ b
{
& D7 X, m& D3 b, o& n9 j
/*打印全部读到的数据*/
3 K; U# _7 f& k" D6 m6 c
for(i=0; i<upp_frame_size; )
- z6 ]$ B" M9 i8 J: w
{
* ^* S4 F* M; v" L4 o
for(j=0; j<5; j++)
1 S! z$ g# ^5 I4 p
{
* w1 f5 i/ R6 ?+ M9 E. y) O! T j1 Y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 z: p; L4 ^ V$ H* K
i++;
" y" i' [( h0 r7 |; x. c, g
//if(i >= 4096)
4 K1 @% ~8 u! p+ F" b d5 E' {
// break;
* L& U6 b0 i6 r I c; `
$ Q" D: |/ [1 E! L; K; |) B. G
}
( C% ]. `9 {% Y2 ?4 Z! r; x
UARTPuts("\n",-2);
, ^5 Y3 t4 \- O/ A* z0 D
}
8 K. I* p3 Y- i6 {% @" v
}
" U' l7 A9 @/ X. {* [
" {, a. W7 M6 u7 L( n/ J
}
+ q; w4 z1 s! {* R6 m r* C) |
5 z8 A- o1 u3 m0 ?# @
% m% N$ Q1 q% U `: Y; k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 R* n' D# K9 P4 I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# {0 N! ^8 ~! A m& f; J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4