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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 {7 a- O0 [- Z6 D/ K9 {
main文件:; l( c' t4 n1 v& f2 r( N
interrupt void interrupt4(void)  
  g2 c; |1 t% s7 F9 }* S) {( @{
. l+ m2 @# J% y7 t8 ~  Uint32 sample;
* Y! v$ F$ x* g% L7 V4 `* v$ y" _' y/ `5 g5 Q. V
  sample = input_sample(); // read L + R samples from ADC
- O' R, g& z9 b& g) x  output_sample(sample);   // write L + R samples to DAC - P" n3 c1 |, `' x% ^
  return;
4 q* B5 L% X% Y* l8 d+ p- \8 u# c# l}- |  Q" k7 T! n- Q' D$ u$ c

" D8 ]/ t5 H- \  p9 N9 }int main( void )" q: }9 f2 l6 m8 Z7 n
{
' H- L# p( m# B1 f9 D/ b9 _1 O# E
/ j/ |3 F( ^3 n' \" m) J% H    /* Initialize BSL */
7 T% S0 ^' h/ p/ }' e    EVMC6747_init( );
! M4 `. s* ]+ b! i$ H" j        /* Call evmc6747_intr function */
5 |2 @. g. Z. U' P, D' Q7 ~    aic3106_init( );0 n5 s  r) `; J
        while(1);2 G8 C) h1 K* n/ f0 z* m
}
- v! I; E( o1 @5 q( n" v
% p0 O' k, G; U4 l
6 l: {6 W- ], V8 w6 w4 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% a6 c: ]4 K3 C4 `4 M' W% q; `/* Initialize MCASP1 */
/ l* T; q$ \" ?6 w8 x    mcasp = &MCASP_MODULE_1;
0 v" j9 I- K! |6 P/ A, C    mcasp->regs->GBLCTL  = 0;       // Reset
& S5 V; C6 [; p0 g4 k  U+ {" V, x    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 U0 Y% o$ m0 H* j* J    mcasp->regs->XGBLCTL = 0;       // Reset TX- M9 P& ]# f: q+ U3 ?2 o) p* t
    mcasp->regs->PWRDEMU = 1;       // Free-running  ~: l" M2 }8 `5 a* J: _* X
   // configure McASP0 receive registers
/ H7 o( s" i( Q2 e    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 U8 E' g$ E; _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 }) d! }; b# ^( }' l$ B# `
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) V$ Z$ j% E1 G% P" B3 T# H
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 S6 A  b+ c, X- C7 k    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! R1 u6 K/ X3 i2 |( i: V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* ~# c- ~! e" M. ^, Z, L* K    mcasp->regs->RINTCTL    = 0x00000000; // Not used# M) q3 M& V8 `
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 I/ {! y, t9 ]( ~6 ]+ A

8 r* \# u! g* }    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 V( B) a* s: V& e6 L, |; e- S
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* ^  c8 u) F- [  K    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) R/ B7 U) }% F6 r- v  x+ T8 n
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 V+ j' Z' S6 d( ]; B# ]! Y8 N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 S$ q8 \. C; b; \/ s* U7 d3 g" i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 `) c- [9 m9 o* U/ n/ |1 H3 n    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 j# l; Y! W/ r5 C
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. j# G3 R$ N% U7 S
) }7 q% H+ P5 ]: X  B; a" ]7 Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( [# z$ E$ R8 F( X( u/ [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 g0 \; [8 C+ V    mcasp->regs->PFUNC      = 0;          // All MCASPs+ c! R& W! _- Q% @2 f) A/ _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* I; l9 t5 [$ P/ W2 Z( n0 L$ f# I6 e+ C1 W' D. v5 M' l
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 r8 h7 \# b* K; {    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. G0 A4 |+ L# ?5 `. `    mcasp->regs->AMUTE      = 0x00000000; // Not used
) m1 {/ x' J2 i2 x0 R0 V  J: @' h, `  y
/* Starting sections of the McASP*/7 _- v( b' U+ _; m  O
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" U1 K' e3 N9 s  R( c2 K, q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& `4 y1 u' z, Z1 q, }- q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 @1 V% B' \" F# K* ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- ]% o4 e: E& Y3 O; N9 G
+ Y* n, h; m7 Z' G- b
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- [. D' T" V* A% d4 q/ g& p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. l. j  Y; |. T8 w9 O
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 M# _" \2 t3 p6 _& {) O) D# [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) L; N0 ~" J5 p1 q
4 L( E  v1 n. O0 K    mcasp->regs->XSTAT = 0x0000ffff; 1 y9 Q, ~( i4 u: i& \5 r
    mcasp->regs->RSTAT = 0x0000ffff; ) F/ j4 @7 A; N1 i6 I! F

. A. Q3 B* Y4 U5 @    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  b* M# H# z4 x& m) f# U9 p& u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 m, S+ i/ Y) c& m. ~3 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + F5 K# _% N9 X1 l! ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ l" A" F$ N: a. w$ g
: _  X' q; Q; W& i4 t6 s! W    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 T8 b) v* g' S% H    mcasp->regs->XBUF5 = 0;# R2 ~8 A. v, K) Q
    mcasp->regs->RBUF0 = 0;8 h8 |, i$ d' e9 J5 e
7 k$ \: o$ i" r- ^( ^, I4 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 P9 K: N" @1 s7 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" i. t2 y0 X# V% \) {" [- F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   }. U1 {6 M0 t+ n8 ^' w( E; x& e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ L) g" z* Z6 b
0 ?* W- e$ E5 e% U, ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 D% L1 [; C/ w7 ?$ r6 I6 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  o' ~. M& h) I4 f) _$ M! h2 G9 s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 A  y0 ^" d9 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 j- |" C/ A/ \) v
  E; [# R* \! |$ M" C2 G4 G
    CSR = 0x0000;% E, f7 s7 L8 D9 {# f
    INTC_INTMUX1 = 0x3d;! e9 H  Q$ M- W. J5 \0 |
    ISTP = (unsigned int)vectors;
2 M6 i( A% r& z; ?    ICR = 0xFFF0;  
' U/ ~! @9 S" Q8 F! W, |9 z    IER |= 0x12;  
5 r/ H3 g9 v4 c+ R2 Z    CSR |= 0x01;  ' P* D4 \& r3 S4 n9 w# L  ?
. ]1 c/ b  F, `6 E' y$ ^& j- ^

+ u% ^2 }/ P' F1 J
" T, B  F6 z5 R% g6 R; L# f8 h) b还有就是两个输入输出函数:. t6 h9 S, x  |8 c# G# s: f! W
void output_sample(Int32 out_data)
7 n* ]+ Z$ f  R. `{
; |2 L3 _& q$ M* D  AIC31_data.uint = out_data;  " q2 l( z; v: `+ y) }1 k0 i0 Y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* |+ j' R6 k0 P5 J
}
! V' T  L" f% M$ O- v: J
/ n) h$ `- C& ~1 ]/ mInt32 input_sample(void)
6 u" m: A; o' ^- j4 w$ C: w+ h8 K{  $ O0 S# k% D+ A" J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% i9 T3 p& c( D- H0 }" j  return (AIC31_data.uint);
+ D- q7 t" i3 T}
6 B8 C+ `8 M; x3 c8 M2 R/ _
! D5 Y5 a5 b/ p, u4 g
分享到:  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-16 16:07 , Processed in 0.040375 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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