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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- o! _' v4 ~3 f) b4 S4 D6 Dmain文件:
2 T+ r, p5 e* R( l& U7 Zinterrupt void interrupt4(void)  
5 j$ ]: V5 Z; s0 Z+ u. y{
' D8 ~5 H$ }" V5 B  Uint32 sample;
# J) `9 I2 G  E% W# N& H7 T  e# Z& b8 {) L4 G& U5 A
  sample = input_sample(); // read L + R samples from ADC2 x( z% r! ^  H. a4 s
  output_sample(sample);   // write L + R samples to DAC
  N, |  N; C; v+ z  return;
7 o: Q3 g" i! j( Z}
& R, M' @6 ^0 j8 |8 ], z  H4 E; V
int main( void )
9 u, k. ]7 r$ {{$ t- H. \! Q( t2 x9 u
5 n& b. |: P; y8 D
    /* Initialize BSL */9 O1 \% Z: Z& l( d* D
    EVMC6747_init( );
6 K* j7 _! h0 Z, e7 P: F9 {2 ^        /* Call evmc6747_intr function */. E$ x0 {: n0 S& K( d1 y) ~. V
    aic3106_init( );5 U; U: v, F. N* `
        while(1);- G3 X# K$ q- Q9 e4 @5 E
}' `$ Y2 i6 z7 h6 V+ r
4 x  [8 N9 h/ d  P+ w

. Y- ^; n* x& u% H% aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! }$ q) c) h% l1 ^4 ]6 g$ l/* Initialize MCASP1 */# ^- T0 l. ^) V/ d% x
    mcasp = &MCASP_MODULE_1;
# F9 J; Z- F4 \* ?    mcasp->regs->GBLCTL  = 0;       // Reset2 o6 i& u$ g, I- C. _. I
    mcasp->regs->RGBLCTL = 0;       // Reset RX- D* K2 b* a& |$ R1 j
    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 T( [$ F$ @" G; L7 K    mcasp->regs->PWRDEMU = 1;       // Free-running7 Q+ {2 m5 ~6 u& u  W7 w
   // configure McASP0 receive registers
6 I/ n' u0 Y( n4 W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 K9 ]( B' F3 p' F9 r3 y' u
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- `6 X  }; x2 x
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 ]/ u$ X- q  r0 p! V/ H    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& l  J" ~7 t! k7 z* F, g7 {    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 T( k  b6 N0 C+ Q7 M% n* I' r    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 ~% X; E% D( ~% e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; F. \& ?  m- t0 z9 i9 f1 E0 e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* e7 x( l. |  N  C$ L1 G1 f& P  n  F+ q  H! e& x( X9 R. ?0 C6 U; N
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ t$ w' m- F5 s) V: P0 U0 Y7 w    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- g9 N0 H+ o. {    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, ~9 l+ @0 P$ c$ W6 G. A5 L! f  R    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 J4 [4 e4 Q$ U
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- L  A& E" g, B( X# m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 v" I+ P. T) [0 Y& Y# Z! g6 Y( G
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, \6 z" ]9 ?: N3 X4 `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 n3 j  X# d7 a) N
: \9 V6 i7 K! ~9 _, y2 U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% M3 p( Q& e! g. F4 G
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ `$ ~( x1 D1 |1 b; h+ _& P    mcasp->regs->PFUNC      = 0;          // All MCASPs" ~; ^4 p; P0 \4 X- E2 E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" ~" J" u* e4 U8 o$ p
6 \6 |" C( ]7 x
    mcasp->regs->DITCTL     = 0x00000000; // Not used
# s  B! c( b5 I0 S6 _0 `* q$ r1 j    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ j  k2 z/ k4 C- ]
    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ ]7 G% {) @7 M1 c, L7 U: R; G2 t6 b& H5 A7 h' h4 C, h1 n) P8 M
/* Starting sections of the McASP*/
* ?1 M( @6 O, e- Z6 G4 T, B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; r8 T5 C7 F2 B7 a" `- ~. u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) n! y* m* g8 t/ [% a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % p4 q$ Q3 j' L) z  p7 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; ?/ n! G& a& X- ~: E% R
. q& \9 t6 O% t+ K
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* i/ g  K# z7 g% D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 C1 V, g+ _$ U/ c/ t  O    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & f  Y, Q  p" z, E0 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. n; S- |% U9 P0 \
4 V' d7 k$ g+ o# p' w/ `    mcasp->regs->XSTAT = 0x0000ffff;
' m2 I& J. z0 G$ }# Z$ x    mcasp->regs->RSTAT = 0x0000ffff; 4 c1 B. l% w" F0 p
3 }* T1 e$ u% T7 f0 I8 k# w0 {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! e# N$ h  _5 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! ?) r) u, R& ^1 o, q' b
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( s3 k* T* p" F' @7 P0 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) I% u  J0 ?7 R0 n$ x, [8 e  ~2 P2 y
    /* Write a 0, so that no underrun occurs after releasing the state machine */) J3 |/ O5 Y: g7 @6 M  Q
    mcasp->regs->XBUF5 = 0;( Y6 ]$ K& F) R2 A/ C
    mcasp->regs->RBUF0 = 0;# S2 b5 j* C6 D
8 K, }' T( P; X+ T: }9 P7 C" B5 g" d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   H  W9 Q+ H9 M: D. e0 G) z+ [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; F2 M. x* ~- Z  K& U6 F2 s% p) j
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 O8 v: D. y4 T  e) [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% R& z: c$ g$ a: g, G5 v# ~& m- [
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ ^0 [" E! X% Z+ R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 C' N  X7 o" Z) i1 B: \9 L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " m/ M5 Q' X: P9 Z& f( I! F! q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- p" Z7 k7 ~7 f( N5 q2 I( v# @; Y/ U3 J. d1 Y: d; `/ H: K! ?& b
    CSR = 0x0000;7 b/ f+ j: ~" m. M( K; v- b
    INTC_INTMUX1 = 0x3d;; Q0 H$ U7 K5 w5 _, B& w. t
    ISTP = (unsigned int)vectors;  g0 }2 G$ B# Q* l; s
    ICR = 0xFFF0;  ' t" T$ _+ @7 B! Y' Z
    IER |= 0x12;  
  f2 W: Z; U7 {    CSR |= 0x01;  
2 P6 M+ w* p; \2 R
( H3 [! Y3 w, [# N3 ]2 g+ A
* O# {) o5 V# U0 A) T3 y( w0 V- r& t1 W% n/ w. U
还有就是两个输入输出函数:6 \5 V# P3 @( d- S3 C
void output_sample(Int32 out_data)
6 B- L; b1 a  g/ F4 i/ I) M{
* w, ^0 d" T- `0 I; x  AIC31_data.uint = out_data;  
6 J/ ^1 y+ ^% p) V; h% K' ^  MCASP1_XBUF5_32BIT = AIC31_data.uint;( S5 K# Z; N) k9 j# p6 y, M( U
}
* |# u1 ?/ Y, k6 j8 [0 `, y3 ?$ M1 w  L# j6 W% y, i9 Z) F
Int32 input_sample(void)
) o1 k7 @9 r" M$ \; N- ?{  ; A3 E' l, r+ M+ \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: K5 q" x" o1 t2 W7 a
  return (AIC31_data.uint);& \0 S9 x* m7 C2 ?; p
}
1 }5 m6 r4 R+ N, Y3 I* s$ _$ Y# b% |& ?. I' j4 p: |, `
分享到:  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-1-30 00:25 , Processed in 0.039732 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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