嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# \& G9 V5 T f3 }" G
Void UPP_TASK(Void)
7 V! B+ u6 @: l: t, s
{
, L2 ^. n" N+ V8 Q; f1 K
( M8 e- T* p, Q1 M! u3 r b; M# N
int i,j,k,target_int_count=2;
3 R g [& z6 k' p r: w
char ch[2];
4 E F9 f1 r2 u7 l2 e2 u
* A! d* D2 q7 R
' V0 r' s9 ^- H; I
. {# \1 o# \* ~
upp_interrupt_count = 0;
0 N# }9 m- x" p0 B3 w! p W1 [
upp_error_count = 0;
; S3 Y, T8 l* e6 \" y8 U
9 D' ?' j6 R; f$ x" F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ r& Q1 x, H" _
// Initialize data buffers
3 R( y% L7 W$ x$ n* \7 {# @
for (i = 0; i < upp_frame_size; i++)
% E1 p5 Z3 J E2 A% l
{
^* j' m! L; A9 G
upp_buffer_b
=i;
! \) X5 @& X" U
upp_buffer_a
= 0xDEAD;
) z) P5 Q7 T) i$ ^' G! `; [
}
9 t! ]' ~) v) Z; p1 m8 `1 ^
5 W8 \" {) J# X4 r X
//for(i=0;i<1024;i++)
/ W8 l b2 o5 ^1 m) d
// temp
=0;
+ N; L; P* b1 E N
0 P, K0 Q* I! P* J0 `" T% ?: k
//UPPReset();
: L: ^+ y" W3 X1 f3 Y
/*启动UPP DMA传输*/
4 J/ N& ?" M. A/ \8 |! w/ h: r- J5 b2 W
UARTPuts("upp_prog_dma_i\n",-2);
* H0 I& j1 I: L7 E1 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( G) C# ]5 Y/ R) m* N+ Y. W
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" \0 `- @" g+ [. Z/ t6 p1 m9 Y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, R2 O5 m5 S9 | a0 O
7 V" b' A6 l8 L, @! K
UARTPuts("upp_prog_dma_i\n",-2);
x* i- E# j- V1 w' S2 L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( ~% ~' _; ]& {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" g- u* Z- Z9 k9 Q1 a/ a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 m) U+ |+ d0 Y$ O
/ G3 `5 e+ m" B8 Q4 N# |
/*等待UPP传输完毕*/
& b' Z, u* Y8 O) b- H
//i=0;
: l) X* U7 [5 X1 P
//j=0;
; E5 `3 t. o+ ^* X$ X2 _2 } o: S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% z# ]; L9 x+ R. Y) z* U$ U
{
/ d+ e4 |/ S/ K2 G7 H
/* 测试UPP传输的同时操作普通DDR数据
5 N0 V8 J b5 B" [
temp
=i;
: r/ v8 h5 t1 w4 M, B# k
i++;
3 i+ E1 P7 o* C& u" ]
if(i==1024)
8 D* B+ ]3 A {; h) u. r
{
5 t1 s( J# ^0 o; N C; n% M
i=0;
, D) h, T/ F. `
j++;
/ O7 |- S0 X3 U4 n; g, ?
}
3 r" S" M# S1 l! b0 v
*/
; S" Q, S% W& \, t: k* V
2 k# I1 x% w( u5 j2 A( f5 K
asm(" nop");
- p8 ?+ O6 m# y; R2 f+ d4 i5 e
% ?2 V0 [& m6 G) o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 p, C9 v. q# x T% Y
}
9 A: W9 t! [ v$ E7 B. z
+ Z* d8 P, L' N3 @
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 U! n( j* [. f9 N" l. z& r
//UARTprintf( "i=%d\n",i);
: C& f# X8 Y# }/ B2 @) A4 `
//UARTprintf( "j=%d\n",j);
& p$ C% i2 m; B9 p$ y, E
UARTPuts("Data mismatch in buffers.\n",-2);
( v5 ^- F' E) g: o! s) o$ ~$ U
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 b3 w$ c8 `; `
{
% g6 i. V% ] p+ J- e1 D1 C
for (i = 0; i<upp_frame_size; i++)
* x2 R: v$ |- J! @
{
/ D0 D6 g- _: u9 I
if (upp_buffer_a
!= upp_buffer_b
)
! p: T. [% P( u: J+ `8 f/ J$ B
{
+ ?1 S! Z6 O0 h" u8 b1 D
upp_error_count++;
5 S- x" q# ^2 H
}
& R( f* D5 r7 W' G6 U, ^- F
}
/ H5 X, P/ k+ K" z* R. T
}
' E2 g! s, V( I( v2 T! z
- z2 l, _$ P: Q
/* 报告通信结果*/
: _4 X% U1 t/ q' n; F+ }2 i
if(upp_error_count != 0)
0 A7 k+ _' h# J) f% g; Q" J# }9 v: B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 [' t6 m K3 ^8 |) J
else
0 c; Q4 {8 C4 [( r" D
UARTPuts("uPP transfers complete!\n",-2);
; ^; u6 t6 p: W# [9 V9 m% `! X$ s! M
) r. u: k2 x0 S/ F* z1 b- X1 E! D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, A* J# i0 _5 o. w
UARTGets(ch,2);
) c+ N: ?/ E1 W$ _7 C3 f F1 g; ]
UARTPuts("\n", -2);
/ H7 \ ?8 d0 \1 H) L! K
+ f- [, N- M5 a6 D4 S
if(ch[0] == 'y')
" Q `3 Y# J; n; Q
{
: f% _ k4 s1 g( Q4 J) ~
/*打印全部读到的数据*/
8 A9 w: o0 I, c6 c: P: B
for(i=0; i<upp_frame_size; )
7 t# d3 E& A# F" \
{
3 y% k. }0 U% D& ?; n) s
for(j=0; j<5; j++)
+ ^/ e" p( A) [
{
3 O8 y/ {8 g/ O- ^& ^8 M4 B7 f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 ^* |9 x" t. t' C R) u; n
i++;
2 r* ^6 ?5 n4 R5 g0 c ?
//if(i >= 4096)
$ w" Y: p8 ?# i" c' ? J
// break;
7 x2 i+ C. E% b c6 Y- Z% r
$ y' P9 R4 D j" `
}
# \' Q9 o9 O3 A) y
UARTPuts("\n",-2);
) W) H9 g+ |* I; Y- \* a g0 i' _
}
G" z, M( _4 `0 R) A8 D
}
$ w# f) x5 K# w& c
5 L5 w) y& C5 ^$ x& _! f9 Q
}
0 n$ v- _7 E: @5 k6 E0 ]' g8 Q
% e! G& `* I h! Q2 k
# L- Z3 ^8 f- |; @, F1 V
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, b8 M) P6 W8 l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% ^ C9 `7 ]' e: @# }8 P: l+ K% r! p
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4