C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6328|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, f1 g- }3 d) _& V0 F) v0 A' m
main文件:" C; E' [' h  d/ K) F+ X" {
interrupt void interrupt4(void)  & K6 k, u8 |. k( I" z$ f
{
& \- A7 A/ t% ?* D$ p. |  Uint32 sample;( a" E1 @1 r2 E% W& w1 p8 g6 g1 h- M

7 C6 e4 {- K) Z% _4 z; [0 ?% h, |  sample = input_sample(); // read L + R samples from ADC  t4 I/ W# A- n7 T% _6 |' g! o2 y
  output_sample(sample);   // write L + R samples to DAC ) ^5 m/ s- w% G
  return;
/ n# G7 B9 M) g( p! G# ^}
5 e3 J% X0 |% d5 h1 c& V5 R5 z! K4 M' g) `
int main( void )
7 B: j  \3 W- Y: y  h/ b) `{
* P2 E$ l, t1 k# O1 n" p& f! X: y$ p& m9 a9 {- ]
    /* Initialize BSL */
$ n6 D% q' e, m    EVMC6747_init( );6 a" _1 V) e. @& c
        /* Call evmc6747_intr function */
! M  ]: Z- D( s    aic3106_init( );; f5 F9 `' c+ X
        while(1);0 {- D( F# w; c+ [0 v/ p2 ]
}: Z% I) c( o" \- c5 W$ M
) A- p' O. |% x' e& P5 N

4 l$ N6 c+ P. iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 h! E- C; B0 k- k/ w! H/* Initialize MCASP1 */
# ?& _3 X9 _, g  M8 G    mcasp = &MCASP_MODULE_1;
) @4 T: {* t5 C; V. f, [3 Y    mcasp->regs->GBLCTL  = 0;       // Reset: H0 l0 p3 P: C' |( k
    mcasp->regs->RGBLCTL = 0;       // Reset RX, h2 k4 e4 v  [: G- i$ w% Z& D  x
    mcasp->regs->XGBLCTL = 0;       // Reset TX- v# M: Z  V/ a3 @) D
    mcasp->regs->PWRDEMU = 1;       // Free-running
. {3 A- _  Y; V; F- }7 A7 R: ?   // configure McASP0 receive registers
( z! j. R/ o' R4 J0 e    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 R1 \0 o; z) j& E  b$ l  Y5 \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 |6 p) `$ |4 y/ p
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ B6 @+ M2 g, u0 f! V
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 [# ?% v, T2 S5 r    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) c) w4 s# I* U6 w8 t) `$ k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% o5 E+ e% a& N    mcasp->regs->RINTCTL    = 0x00000000; // Not used) v* v, ?* m6 j+ P3 Y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 y9 m; {* f) f9 D, k) x* G

* F/ Q( k6 }. p7 \9 c+ K7 Y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 F5 V- T! l4 \) r) B* P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" I4 k8 e+ E2 T8 Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' U7 A* e, m3 D) Z4 S! f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: G7 p- Q/ \+ n' I- p* {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, v: l# k; x) d- d! m; D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* J" _% T# |9 S& w* M7 C8 P    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( F( x, z- J7 D! a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; D1 T3 C2 L, H: O. \  F$ I
  c# S# W; W: y; G, q  \& Z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 d' }, t7 A& \" s/ f/ h& z1 B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 o) [5 G% S" c    mcasp->regs->PFUNC      = 0;          // All MCASPs
' @  u* }+ d' r  ?. F& W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, r: X2 g+ L6 p  {; `- r" m4 Y4 e1 s7 E, M# m. e+ t
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ \) Y) R- r! X; K  N1 |
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 V% H" @2 Y: m: A1 H6 N4 N; i4 d& m    mcasp->regs->AMUTE      = 0x00000000; // Not used4 k  n- {2 Q+ I+ F# K) @: B5 c
& [* p  ^7 d5 ?) z( [8 D
/* Starting sections of the McASP*/
- [% ?' z& |2 q% y+ k. M    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" |2 r& }1 X1 _( U' `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . |. _. g$ J# g# T& u4 M
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & B% q$ k- L; r3 E4 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) R; V! g4 a$ G/ G( u" Q' \
  V" c/ G9 S, L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( x$ y$ B* k5 m# U( Z5 U7 P) `1 Y& {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) [1 U9 J  C1 s. u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( f/ M5 j. E: @7 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* j% t' g! g/ J/ `/ ?- n

2 D/ m% ?" E. [) t    mcasp->regs->XSTAT = 0x0000ffff; - t# u. i' m1 g2 z/ Y8 j
    mcasp->regs->RSTAT = 0x0000ffff;
" C7 Q. W( A* c7 Q+ G- C5 Z# f1 n" L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% p! j  q+ ^% ?6 S9 p5 u: h- q) x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 r( s* \+ r/ B( y+ [
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ M" H$ o" v( Y* X1 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' V  Z) ]3 g+ M
/ ^* {4 C3 A* v7 u' z/ e4 s! ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 J* d  \6 y) j4 x4 `& b' D- W    mcasp->regs->XBUF5 = 0;9 O0 S: X. r9 L  d
    mcasp->regs->RBUF0 = 0;: g8 M; X! a4 z  Q1 y3 |

7 |/ Q" J$ A, H1 |. H# }& K+ q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) U8 a& f7 L6 }9 a& N) |/ f) \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) @7 N3 f# G, G9 E+ c
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- c3 i, B! q+ t/ ?: L% H7 y; x8 y& K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) q0 D, S& {" H0 w7 P8 |

. B/ ?2 d. t! p* l( C6 y" _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: W% p. j  i3 j% `* {8 K, `, ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! k! G! |- P( b" f/ }* S% m1 D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* i$ X# e# K' N6 D* ]% j1 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: s- R% l, v- O6 E7 R9 Q- T8 Y8 c( M7 J
6 W: m. R) x2 a+ D, S% Z% G
    CSR = 0x0000;! d1 o1 Z% f7 m# u& H( M& D3 ], ~" j
    INTC_INTMUX1 = 0x3d;
7 R* d) @* l5 \3 M) w% @    ISTP = (unsigned int)vectors;
6 |* F8 H4 Q. a& z" V/ |. }* h9 m    ICR = 0xFFF0;  $ B7 L$ V) S$ ?0 x" Y3 n
    IER |= 0x12;  ( q# i, \6 ^# V6 L
    CSR |= 0x01;  ' D8 B4 h; w' M9 C+ B6 k, m
9 k6 |# k- _" U. e, q  @! V$ y

: ]9 O& D6 f3 w8 j2 k5 [( b# p- r' h4 _: d2 `
还有就是两个输入输出函数:
& u8 t9 A2 a" t2 @2 Tvoid output_sample(Int32 out_data)4 Z. X# g( [& R3 h1 q5 r9 w
{
; w6 Z  k) _$ z, U, z5 K  AIC31_data.uint = out_data;  
. ~  j; d8 b2 y$ S  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 t! A! a- V' N
}
+ {. R# }- P! r8 `0 r7 r2 N8 D4 j$ g( d3 J* k* T$ G
Int32 input_sample(void)
+ t; U  e" N3 i! [' Z7 o5 g8 p0 P{  8 E+ D) v; z7 |2 |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- G: A3 O  q. T. M  D% Z  return (AIC31_data.uint);% ?6 \7 v& E+ J; Z  h; x0 l& r7 Y
}% Y1 |3 M  W6 z9 m: Y7 i
  l; G, L% L2 N8 O3 {3 e' X/ x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-16 18:05 , Processed in 0.055161 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表