嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ ^+ Q8 g% a3 J( z$ [
Void UPP_TASK(Void)
3 P7 m q" d8 V
{
2 I' f ?" p- a# K
5 l+ q" R& t6 z. ~4 I0 R0 u5 N
int i,j,k,target_int_count=2;
$ M- b: Y7 J- s2 |& x p
char ch[2];
) R2 P" V+ J( Q1 r# k
2 C5 k$ l7 q: H5 E' X7 o6 N
6 W7 W7 ^; {8 [
& U; H. u1 t; C8 d$ C5 B& o
upp_interrupt_count = 0;
* S- J$ G4 S3 Q% y# A
upp_error_count = 0;
' F& d5 q& m3 |# B. e/ H
, M# R! c4 n4 q8 e. f% |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* m* b u) _3 Y" E% V9 h# _
// Initialize data buffers
" ?6 l4 g* M. Y7 \
for (i = 0; i < upp_frame_size; i++)
1 Q9 r0 t: D! O6 ~( z Y# W
{
: |/ G8 N' I0 {1 w4 A+ e8 w+ F
upp_buffer_b
=i;
0 f' s# i- ^3 c( H m- `4 }
upp_buffer_a
= 0xDEAD;
, ?: b. P9 W4 J( y( v) h
}
+ u8 p, \9 a: H
9 o4 H- M! _. }1 m- w
//for(i=0;i<1024;i++)
, g/ Z& _( t2 g0 e2 Q+ _
// temp
=0;
* ]% O/ \" c, j6 _# a
' U9 D! e% C4 T3 a$ u9 P
//UPPReset();
1 ~ l; |' K/ n0 ~
/*启动UPP DMA传输*/
& n; M3 `+ j7 o% z, p
UARTPuts("upp_prog_dma_i\n",-2);
9 i; v: E/ k5 H- e# ?- p& z) `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. O: V7 }/ T# J% E" Y' c$ e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 L/ i1 @" \' t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' t' v* f, f( w! \" j p' D
* f. p2 P# d4 Z `9 X1 j7 n+ e; Q7 K
UARTPuts("upp_prog_dma_i\n",-2);
7 _1 B' C0 ~$ f1 Y9 `9 ?/ W
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( ]2 e" d! f; s( F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 v+ ^ q4 m* u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: W& n2 b4 N- w, Z2 F
! L9 J8 H0 B! Y8 |# U' Z
/*等待UPP传输完毕*/
+ M( _- c& ]: ~+ u: H
//i=0;
7 ]" R+ ~) E& x& r% f
//j=0;
- N U$ N! g% Z/ n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 K2 X, ~8 q) e- B0 s3 E
{
, L% B$ v! b* P! m
/* 测试UPP传输的同时操作普通DDR数据
& f# e5 [6 ~, e/ n+ U6 w
temp
=i;
6 f T4 o& [/ _
i++;
$ G6 t7 D% K. Y* b
if(i==1024)
% e8 u/ r: _% y2 j
{
' ^9 f; |- ?3 b4 k1 E
i=0;
& b# d% x- M) g
j++;
- D- }7 @/ o+ w" C
}
/ J0 I9 u" u1 L
*/
( W: r9 A* Q; x, B1 v' E
. e/ J6 s" o4 k0 O2 l& @
asm(" nop");
/ g3 ~% X# b# `" n5 J1 Z/ I
: Z! `: s5 M5 F; ?% Q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; @* [" r3 `- G- p P1 P
}
, M$ W1 } F$ n; o3 b/ c
+ B8 N' F4 ]6 O7 A" H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- U5 D' n) E4 p$ r
//UARTprintf( "i=%d\n",i);
8 n, L4 J5 o3 \; j% m" m
//UARTprintf( "j=%d\n",j);
- }6 c- b% Q* D. S- w# d' a8 o
UARTPuts("Data mismatch in buffers.\n",-2);
4 ?0 {+ X; x6 {# N
if (upp_interrupt_count == 2 && upp_error_count == 0)
* S, b# s1 Z/ M% }
{
) ^: ]3 X1 D M; q+ f' O
for (i = 0; i<upp_frame_size; i++)
& k: Q* |1 a, F# R9 ^4 q* R
{
8 u m+ V! E# g8 }) u
if (upp_buffer_a
!= upp_buffer_b
)
5 M, |2 p, G$ c
{
$ @5 S6 E& x' s( ?/ ^( v1 C
upp_error_count++;
# [9 `" e8 Z2 B
}
+ \# C: R1 _6 T0 D0 @& T+ Z) { _
}
( b; y. M9 c# l, m% W
}
7 R( S5 p2 _2 s* }1 Y* k
( t4 l _9 ?- ^1 w6 f/ n- J" p3 H
/* 报告通信结果*/
' R- O; J' g1 s* O
if(upp_error_count != 0)
! P& O) `* m, v+ a4 P' {# E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 e5 F5 E/ f6 f7 w! [7 J
else
+ v( }9 x2 d i/ |) n
UARTPuts("uPP transfers complete!\n",-2);
% P0 ~3 L- ?0 Y, Z6 B+ z. A
: F+ t8 A" b4 B; }
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 ]& g: Q( B* e0 X' w4 }
UARTGets(ch,2);
$ T2 V( h2 n/ M% \4 s* L9 l
UARTPuts("\n", -2);
: G7 {4 k- u% R
" K% s3 z/ ]1 A) L6 E
if(ch[0] == 'y')
4 @& @+ b, S6 C9 [
{
7 U5 u1 S! K; G% m0 m
/*打印全部读到的数据*/
' |! p7 {5 }( i( K) ^* C, t6 S
for(i=0; i<upp_frame_size; )
5 L% G$ J$ b- H) k& B2 d6 n2 e N4 [
{
' E0 W1 S) m/ {! e
for(j=0; j<5; j++)
! c3 J4 {$ E" k, b
{
/ p# B! m# v2 Q/ |6 \
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- K% c( `9 A/ i
i++;
3 O* M! E( u3 M2 j* [
//if(i >= 4096)
3 y: x$ W) P A, a7 V
// break;
5 E* ?( _# A# Y' I" E" H* |/ Z
& i* g- F# y3 |" a. @
}
+ X. g2 p" W1 F+ ?7 \
UARTPuts("\n",-2);
6 z% Z) @/ \- X! s
}
% M: `7 N, J) k2 A$ T
}
' }; `/ V: R% c2 }! ~2 S
- E& i8 }+ ^4 E) P' v. i. M' e1 l
}
( D6 j% y: N6 O
) C* w" |, w, u* h8 ~: L
9 \+ e! s) \1 }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( F" }3 \: o( A0 G4 b: ?6 ^" _4 L( X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( f0 a' R: o3 [ W
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4